Hat ile ilgili olarak:
if (arr == false) console.log("It's false!");
Belki bunlar yardımcı olacaktır:
console.log(0 == false) // true
console.log([] == 0) // true
console.log([] == "") // true
falseGerçek olduğuna inandığım şey , booleanın 0bir nesneyle (sol taraf) karşılaştırma yapmak için zorlanmasıdır . Nesne bir dizeye (boş dize) zorlanır. Daha sonra, boş dize bir sayıya, yani sıfıra zorlanır. Ve son karşılaştırma 0== 0, yani true.
Düzenleme: Tam olarak nasıl çalıştığı hakkında ayrıntılar için teknik özelliklerin bu bölümüne bakın .
Kural # 1'den başlayarak olanlar:
1. Tür (x) Tür (y) 'den farklıysa, 14. adıma gidin.
Geçerli olan bir sonraki kural # 19:
19. Type (y) Boolean ise, x == ToNumber (y) karşılaştırmasının sonucunu döndürün.
Sonucu ToNumber(false)olduğunu 0şimdi var bu yüzden,:
[] == 0
Yine, # 1 kuralı bize # 14 adıma atlamamızı söyler, ancak gerçekte geçerli olan bir sonraki adım # 21'dir:
21. Tür (x) Nesne ve Tür (y) Dize veya Sayı ise, karşılaştırmanın sonucunu ToPrimitive (x) == y olarak döndürün.
Sonucu ToPrimitive([])şimdi var bu yüzden, boş dizedir:
"" == 0
Yine, # 1 kuralı bize # 14 adıma atlamamızı söyler, ancak gerçekte geçerli olan bir sonraki adım # 17'dir:
17. Tür (x) Dize ve Tür (y) Sayı ise, karşılaştırmanın sonucunu döndürün ToNumber (x) == y.
Sonucu ToNumber("")DİR 0bize bırakır,:
0 == 0
Şimdi, her iki değer de aynı türe sahip, bu nedenle adımlar # 1'den # 7'ye kadar devam ediyor;
7. x, y ile aynı sayı değeriyse, true değerini döndürün.
Böylece geri dönüyoruz true.
Kısaca:
ToNumber(ToPrimitive([])) == ToNumber(false)