String JavaScript dan konversi angka

89

Bagaimana saya bisa melakukan hal berikut di JavaScript?

  1. Gabungkan "1", "2", "3" menjadi "123"

  2. Ubah "123" menjadi 123

  3. Tambahkan 123 + 100 = 223

  4. Ubah 223 menjadi "223"

pengguna366312
sumber
42
Hampir semua buku JavaScript yang saya baca berhubungan dengan masalah ini. Tapi tidak apa-apa. Menjawab pertanyaan adalah inti dari StackOverflow. @ Shadi Almosri - SO memiliki aturan "jangan kejam". Saya tidak melihat pentingnya meremehkan orang yang mengajukan pertanyaan di sini, karena itulah inti dari tempatnya.
Nosredna
4
@Nosredna: Saya benar-benar mengerti mengajukan pertanyaan, saya suka tidak lebih dari menjawabnya, tetapi saya pikir menunjukkan fakta bahwa Anda telah mencoba adalah etiket yang lebih baik daripada hanya mengharapkan jawaban dan juga lebih baik untuk pengalaman belajar pribadi. Hanya opini saya, tidak mencoba untuk menjadi jahat! :)
Shadi Almosri
1
@ Shadi, jadi bagaimana seharusnya pertanyaan itu diajukan? Dengan pernyataan sudah mencari jawabannya?
Nosredna
1
Itu mengejutkan saya sebagai pekerjaan rumah ketika saya pertama kali melihatnya, tetapi ketika saya membacanya ulang, saya pikir tidak, sepertinya seseorang bereksperimen dalam JavaScript dan mendapatkan hasil yang tidak terduga dan ingin memahaminya. Karena itu, saya ingin tahu apakah stackoverflow.com/faq mungkin menyertakan sesuatu seperti kode kehormatan untuk siswa. Kami semacam universitas global di sini, dan menurut saya tidak gila untuk mencoba mencari tahu seperangkat etika apa yang mungkin untuk tempat ini. Atau mungkin itu gila. :-)
artlung
6
@Shadi, sisi positifnya, tanya jawab ada di StackOverflow, dan semoga bisa membantu orang lain. Saya melihat orang-orang terjebak pada hal-hal ini setiap saat, terutama jika berasal dari bahasa seperti Java. Ada alasan orang menanyakan hal ini berulang kali - itu karena mereka BERPIKIR mereka tahu cara kerja ekspresi dalam JavaScript, tetapi sebenarnya tidak. Mereka membuat asumsi berdasarkan pengalaman di luar JS. Itulah mengapa sangat berguna untuk mencoba beberapa tes sederhana dengan menambahkan string dan angka, dan mencoba plus dan minus unary.
Nosredna

Jawaban:

120

Anda ingin mengenal parseInt()dan toString().

Dan berguna dalam toolkit Anda adalah melihat variabel untuk mengetahui jenisnya— typeof:

<script type="text/javascript">
    /**
     * print out the value and the type of the variable passed in
     */

    function printWithType(val) {
        document.write('<pre>');
        document.write(val);
        document.write(' ');
        document.writeln(typeof val);
        document.write('</pre>');
    }

    var a = "1", b = "2", c = "3", result;

    // Step (1) Concatenate "1", "2", "3" into "123"
    // - concatenation operator is just "+", as long
    //   as all the items are strings, this works
    result = a + b + c;
    printWithType(result); //123 string

    // - If they were not strings you could do
    result = a.toString() + b.toString() + c.toString();
    printWithType(result); // 123 string

    // Step (2) Convert "123" into 123
    result = parseInt(result,10);
    printWithType(result); // 123 number

    // Step (3) Add 123 + 100 = 223
    result = result + 100;
    printWithType(result); // 223 number

    // Step (4) Convert 223 into "223"
    result = result.toString(); //
    printWithType(result); // 223 string

    // If you concatenate a number with a 
    // blank string, you get a string    
    result = result + "";
    printWithType(result); //223 string
</script>
artlung
sumber
Adakah alasan khusus Anda menempatkan ini dalam tag skrip?
Julix
@Julix Untuk pemula di tahun 2009, masuk ke file html untuk mempelajari konsep dasar. Jika saya menjawab pertanyaan baru ini hari ini, saya mungkin akan melakukannya secara berbeda, tetapi mungkin juga tidak.
artlung
53

Langkah (1) Gabungkan "1", "2", "3" menjadi "123"

 "1" + "2" + "3"

atau

 ["1", "2", "3"].join("")

The bergabung metode merangkai item dari sebuah array ke dalam string, menempatkan pembatas tertentu antara item. Dalam kasus ini, "pembatas" adalah string kosong ( "").


Langkah (2) Ubah "123" menjadi 123

 parseInt("123")

Sebelum ECMAScript 5 , perlu melewati radix untuk basis 10:parseInt("123", 10)


Langkah (3) Tambahkan 123 + 100 = 223

 123 + 100


Langkah (4) Terselubung 223 menjadi "223"

 (223).toString() 


Put It All Togther

 (parseInt("1" + "2" + "3") + 100).toString()

atau

 (parseInt(["1", "2", "3"].join("")) + 100).toString()
Patrick McElhaney
sumber
4
Contoh yang bagus dan jelas. Juga, pujian untuk bentuk yang baik - Anda harus selalu menentukan radix untuk parseIntfungsi tersebut .
hotshot309
Termasuk radix membingungkan saya dan saya menggulir ke jawaban lain di mana itu dijelaskan. Diedit dalam penjelasan singkat agar tepat pada titik kebingungan.
ArtOfWarfare
@ArtOfWarfare Terima kasih, edit yang bagus. Radix diperlukan pada saat jawaban ini. Hari-hari ini, saya bisa membuat argumen untuk mengabaikannya. Mulai ES5, yang didukung oleh semua browser "modern" dan Node.js, parseInt (<a string dengan hanya 0-9>) selalu menggunakan basis 10.
Patrick McElhaney
fakta menyenangkan .. dalam JavaScript asli Netscape (sekitar 1995) radix default untuk parseInt adalah 8 (kecuali string berisi dan 8 atau 9)
Justin Ohms
27
r = ("1"+"2"+"3")           // step1 | build string ==> "123"
r = +r                      // step2 | to number    ==> 123
r = r+100                   // step3 | +100         ==> 223
r = ""+r                    // step4 | to string    ==> "223"

//in one line
r = ""+(+("1"+"2"+"3")+100);
cesarl
sumber
Terima kasih untuk string cepat -> konversi angka
mcont
Jika Anda memeriksa itu adalah angka atau tidak, gunakan parseInt (). Misalnya, parseInt ("") adalah NaN, tetapi + "" adalah 0!
Greene
15

Pertanyaan-pertanyaan ini muncul setiap saat karena sistem pengetikan JavaScript. Orang mengira mereka mendapatkan nomor ketika mereka mendapatkan rangkaian angka.

Berikut beberapa hal yang mungkin Anda lihat yang memanfaatkan cara JavaScript menangani string dan angka. Secara pribadi, saya berharap JavaScript telah menggunakan beberapa simbol selain + untuk penggabungan string.

Langkah (1) Gabungkan "1", "2", "3" menjadi "123"

result = "1" + "2" + "3";

Langkah (2) Ubah "123" menjadi 123

result = +"123";

Langkah (3) Tambahkan 123 + 100 = 223

result = 123 + 100;

Langkah (4) Ubah 223 menjadi "223"

result = "" + 223;

Jika Anda tahu MENGAPA ini berfungsi, Anda cenderung tidak mengalami masalah dengan ekspresi JavaScript.

Nosredna
sumber
3
Saya sebenarnya berpikir ini adalah praktik yang sangat buruk karena cukup kabur tentang apa yang sedang terjadi. Mengetahui bahwa operasi tertentu memengaruhi pemeran implisit adalah tipuan, dan bagus untuk diketahui, tetapi sama sekali tidak dapat dibaca. Komunikasi adalah segalanya.
annakata
1
Saya pikir penting untuk mengetahui hal-hal ini SEPENUHNYA sehingga Anda tahu apa yang terjadi ketika Anda membaca kode. Banyak JavaScript yang singkat karena dikirimkan sebagai sumber, dan kode kecil dapat berarti pengurangan biaya server.
Nosredna
6
Anda harus mencapai ini melalui alat kompresi, dalam bentuk ini pengoptimalannya dengan biaya pemeliharaan yang sangat nyata.
annakata
6
Namun, mengetahui hal-hal ini akan membantu mencegah pertanyaan sejak awal, yaitu kurangnya pengetahuan tentang bagaimana JavaScript menangani string dan angka. Ini masalah keingintahuan intelektual. Apa yang terjadi jika saya menambahkan angka ke string? Bagaimana cara kerja unary plus? Jika Anda tidak tahu jawabannya, Anda tidak benar-benar tahu JavaScript, dan pertanyaan semacam ini akan muncul.
Nosredna
11

Anda bisa melakukannya seperti ini:

// step 1 
var one = "1" + "2" + "3"; // string value "123"

// step 2
var two = parseInt(one); // integer value 123

// step 3
var three = 123 + 100; // integer value 223

// step 4
var four = three.toString(); // string value "223"
Andrew Hare
sumber
16
Praktik terbaiknya adalah menambahkan parameter radix ke fungsi parseInt (). jadi, parseInt (satu, 10) memastikan bahwa apa pun yang Anda berikan tidak akan salah konversi.
artlung
3
Sepakat. Jika tidak, nilai yang dimulai dengan 0akan terlihat sebagai angka oktal (basis 8) .
hotshot309
1
Bahkan lebih tidak terduga, nilai yang dimulai dengan 0dan kemudian mengandung 8atau 9akan gagal, mengarah ke pengembalian 0. Misalnya parseInt('034') = 28,, dan parseInt('09') = 0.
Robert Martin
9

Untuk mengubah string menjadi angka, kurangi 0. Untuk mengubah angka menjadi string, tambahkan "" (string kosong).

5 + 1 akan memberi Anda 6

(5 + "") + 1 akan memberi Anda "51"

("5" - 0) +1 akan menghasilkan 6

Robert L
sumber
1
Mengandalkan trik berdasarkan kebiasaan bahasa seperti ini dapat menyebabkan ketidakjelasan nyata. misalnya "5" -0 memang menghasilkan angka 5, tetapi "5" +0 menghasilkan string "50". (Ya, saya tahu itu bertahun-tahun kemudian dan mungkin agak menyedihkan saya bahkan membaca ini.)
Nick Rice
6

parseInt salah fitur seperti scanf:

parseInt ("12 monkeys", 10) adalah angka dengan nilai '12'
+ "12 monyet" adalah angka dengan nilai 'NaN'
Angka ("12 monyet") adalah angka dengan nilai 'NaN'

xander
sumber
1

Di bawah ini adalah contoh yang sangat menjengkelkan tentang bagaimana JavaScript dapat membuat Anda mendapat masalah:

Jika Anda hanya mencoba menggunakan parseInt()to convert to number dan kemudian menambahkan angka lain ke hasilnya, itu akan menggabungkan dua string.

Namun, Anda bisa menyelesaikan soal dengan menempatkan ekspresi jumlah dalam tanda kurung seperti yang ditunjukkan pada contoh di bawah ini.

Hasil: Jumlah usia mereka: 98; Jumlah usia mereka BUKAN: 5048

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
function Person(first, last, age, eye) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eye;
}

var myFather = new Person("John", "Doe", "50", "blue");
var myMother = new Person("Sally", "Rally", 48, "green");

document.getElementById("demo").innerHTML = "Their age sum is: "+
 (parseInt(myFather.age)+myMother.age)+"; Their age sum is NOT: " +
 parseInt(myFather.age)+myMother.age; 
</script>

</body>
</html>

jpsousa.dll
sumber
0

Paling sederhana adalah ketika Anda ingin membuat integer menjadi string

var a,b, c;
a = 1;
b = a.toString(); // This will give you string

Sekarang, dari variabel b yang bertipe string kita bisa mendapatkan integer

c = b *1; //This will give you integer value of number :-)

Jika mau cek diatas adalah angka. Jika Anda tidak yakin apakah b berisi integer maka Anda dapat menggunakan

if(isNaN(c*1)) {
  //NOt a number
}
else //number
Kshitiz
sumber
0

Kita dapat melakukan ini dengan menggunakan operator unary plus untuk mengonversinya menjadi angka terlebih dahulu dan cukup menambahkan. Lihat di bawah:-

var a = "4";
var b = "7";
var sum = +a + +b; 
singhkumarhemant
sumber