Saya sedang berlatih JavaScript ketika salah satu teman saya menemukan kode JavaScript ini:
document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());
Kode di atas menjawab "banana"
! Adakah yang bisa menjelaskan mengapa?
javascript
type-conversion
HV Sharma
sumber
sumber
+"a"
isNaN
.+'a'
sendiri dan lihat apa yang terjadi.Jawaban:
+'a'
memutuskan untukNaN
("Bukan Angka") karena itu memaksa string ke angka, sedangkan karaktera
tidak dapat diuraikan sebagai angka.banana
.Menambahkan
NaN
ke"ba"
berubahNaN
menjadi string"NaN"
karena konversi tipe, memberibaNaN
. Dan kemudian ada dia
belakang, memberibaNaNa
.Ruang di antara
+ +
adalah untuk membuat penggabungan string pertama dan yang kedua operator unary plus (yaitu "positif"). Anda memiliki hasil yang sama jika Anda menggunakan'ba'+(+'a')+'a'
, diselesaikan sebagai'ba'+NaN+'a'
, yang setara dengan'ba'+'NaN'+'a'
karena jenis juggling.sumber
... dievaluasi sebagai ....
(lihat: prioritas operator )
(+'a')
mencoba untuk mengkonversi'a'
ke nomor menggunakan operator plus unary . Karena'a'
bukan angka, hasilnya adalahNaN
( "Bukan-A-Nomor" ):Meskipun
NaN
kependekan dari "Not a Number", itu masih tipe numerik ; ketika ditambahkan ke string, ia merangkum sama seperti nomor lainnya:Akhirnya, huruf kecil:
sumber
Untuk lebih jelasnya, mari kita bagi menjadi dua langkah. Pertama, kita mendapatkan nilai dari ekspresi yang di dalam tanda kurung dan kemudian kita menerapkan
toLowerCase()
fungsi pada hasilnya.Langkah pertama
Go LR , kami memiliki:
'b' + 'a'
mengembalikan ba , ini adalah rangkaian reguler.ba + + 'a'
mencoba untuk menyatukan ba dengan+ 'a'
. Namun, karena operator unary+
mencoba untuk mengubah operan menjadi angka, nilai NaN dikembalikan, yang kemudian dikonversi menjadi string ketika digabungkan dengan ba asli - sehingga menghasilkan baNaN .baNaN
+ 'a' mengembalikan baNaNa . Sekali lagi, ini adalah pertemuan rutin.Langkah dua
Menerapkan
.toLowerCase()
nilai yang dikembalikan dari langkah pertama memberi:Ada banyak permainan kata yang mirip dalam JavaScript yang dapat Anda periksa.
sumber
Itu hanya karena + operator.
Kita bisa mendapatkan pengetahuan lebih lanjut dari chunk it.
Sebagai contoh
Anda dapat mengubah string menjadi angka dengan 2 cara:
Jadi kembali ke permintaan awal; Di sini ia mencoba untuk mengkonversi char berikutnya ('a') ke nomor tetapi tiba-tiba kami mendapat kesalahan NaN,
Tapi itu memperlakukan sebagai string karena karakter sebelumnya ada di string. Jadi itu akan terjadi
Dan terakhir itu mengubahnya menjadi toLowerCase (), Jadi itu akan menjadi pisang
Jika Anda meletakkan nomor di sebelahnya, hasil Anda akan berubah.
Itu akan menjadi 'ba1a'
sumber
Baris kode ini mengevaluasi ekspresi dan kemudian memanggil metode berdasarkan nilai yang dikembalikan.
Ekspresi
('b' + 'a' + + 'a' + 'a')
ini hanya terdiri dari string literal dan operator tambahan.Tindakan implisit yang diambil adalah panggilan untuk ToNumber pada sebuah string
Penerjemah memiliki aturan tentang bagaimana mem-parsing ekspresi, dengan memecahnya menjadi komponen-komponen ekspresi kiri dan kanan.
Langkah 1:
'b' + 'a'
Ekspresi Kiri:
'b'
Nilai Kiri: 'b'
Operator: + (salah satu sisi ekspresi adalah string, jadi string concatenation)
Ekspresi Benar:
'a'
Nilai Benar: 'a'Hasil:
'ba'
Langkah 2:
'ba' + + 'a'
Ekspresi Kiri:
'ba'
Nilai Kiri: 'ba'
Operator: + (salah satu sisi ekspresi adalah string, jadi string concatenation)
Ekspresi Benar:
+ 'a'
(ini mengevaluasi Nilai Matematika dari karakter 'a' dengan asumsi bahwa itu adalah angka positif dari tanda + - tanda minus juga akan bekerja di sini menunjukkan angka negatif - yang menghasilkan NaN)Nilai Tepat: NaN (karena operatornya adalah string concatenation, toString dipanggil pada nilai ini selama concatenation)
Hasil: 'baNaN'
Langkah 3:
'baNaN' + 'a'
Ekspresi Kiri:
'baNaN'
Nilai Kiri: 'baNaN'
Operator: + (salah satu sisi ekspresi adalah string, jadi string concatenation)
Ekspresi Benar:
'a'
Nilai Benar: 'a'
Hasil: 'baNaNa'
Setelah ini ekspresi pengelompokan telah dievaluasi, dan toLowerCase disebut yang meninggalkan kita dengan pisang.
sumber
Menggunakan + akan mengubah nilai apa pun menjadi Angka dalam JavaScript!
Begitu...
Hal utama yang perlu diketahui di sini terlebih dahulu dan pelajari adalah menggunakan
+
sebelum nilai apa pun dalam JavaScript, akan mengubah nilai itu menjadi angka , tetapi jika nilai itu tidak dapat dikonversi, mesin JavaScript akan mengembalikan NaN , yang berarti, bukan angka (tidak dapat angka dikonversi menjadi angka, sobat!) dan kisah selanjutnya seperti di bawah ini:sumber
Baca lebih lanjut tentang NaN di W3Schools atau Mozilla Developer Network
sumber
Lihat keajaibannya di sini. Kedua plus adalah operator unary yang memberi 'NaN'
sumber