'' == '0' // false
Левая часть - это пустая строка, а правая часть - строка с одним символом. Они ложны, потому что он сравнивает две не идентичные строки (спасибо Найл ).
0 == '' // true
Следовательно, почему это так, потому что 0
равно ложь , а пустая строка ложь .
0 == '0' // true
Это немного сложнее. В спецификации говорится, что если операндами являются строка и число, то приведите строку к числу. '0'
становится 0
. Спасибо smfoote .
false == undefined // false
Значение undefined
является особенным в JavaScript и не равно ничему другому, кроме null
. Тем не менее, это ложь .
false == null // false
Опять же, null
особенный. Это только равно undefined
. Это также ложь .
null == undefined // true
null
и undefined
похожи, но не одинаковы. null
означает ничего , тогда как undefined
- это значение переменной, которая не установлена или не существует. Было бы логично предположить, что их значения будут считаться равными.
Если вы действительно хотите запутаться, отметьте это ...
'\n\r\t' == 0
Строка, состоящая только из пробелов, считается равной 0.
Дуглас Крокфорд дает много рекомендаций, но вам не нужно воспринимать их как Евангелие. :)
T.J. Crowder дает отличное предложение изучить спецификацию языка ECMAScript , чтобы узнать всю историю этих тестов на равенство.
Дальнейшее чтение?
Спецификация .
yolpo (при ложных значениях)