MDC menjelaskan ==
operator sebagai berikut :
Jika kedua operan tidak berjenis sama, JavaScript mengonversi operan tersebut lalu menerapkan perbandingan yang ketat. Jika salah satu operan adalah bilangan atau boolean, operan akan diubah menjadi bilangan jika memungkinkan; else jika salah satu operan adalah string, operan lain akan diubah menjadi string jika memungkinkan.
Dengan pemikiran ini, saya akan mengevaluasi "true" == true
sebagai berikut:
- Apakah mereka dari tipe yang sama? Tidak
- Apakah operan berupa bilangan atau boolean? Iya
- Bisakah kita mengonversi keduanya menjadi angka? Tidak (
isNaN(Number("true")) // true
) - Apakah salah satu operan adalah string? Iya
- Bisakah kita mengonversi operan lain menjadi string? Ya (
String(true) === "true" // true
)
Saya berakhir dengan string "true"
dan "true"
, yang seharusnya mengevaluasi true
, tetapi JavaScript menunjukkan salah.
Apa yang saya lewatkan?
javascript
string
equals
Isaac
sumber
sumber
if("true" == true) {console.log("yes")} else {console.log("no")}; if("true") {console.log("yes")} else {console.log("no")}
---> "tidak ya"Jawaban:
Karena
"true"
diubah menjadiNaN
, sementaratrue
diubah menjadi1
. Jadi mereka berbeda.Seperti yang Anda laporkan, keduanya diubah menjadi angka, karena setidaknya
true
bisa (lihat komentar Erik Reppen), lalu dibandingkan.sumber
Can we convert both to a number?
akan salah? JikaNaN
bilangan genap , bagaimana langkah ini bisa gagal?Number(true)
danNumber('true')
The
==
operator perbandingan yang didefinisikan dalam ECMA 5 sebagai:kembalikan hasil perbandingan x == ToNumber (y).
kembalikan hasil perbandingan ToNumber (x) == y.
Jadi, "true" == true dievaluasi sebagai:
===> false
sumber
Menurut Algoritma Perbandingan Kesetaraan Abstrak
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
jika salah satu oprend adalah boolean dan yang lainnya bukan, boolean adalah konverter ke angka 0 atau 1. jadi
true == "true"
salah.sumber