null == undefined
действительно оценивается как true, но null === undefined
оценивается как false.
Разница в этих двух утверждениях заключается в операторе равенства. Двойное равенство в Javascript преобразует два элемента в один и тот же тип перед их сравнением; для null == undefined
это означает, что null
преобразуется в неопределенную переменную перед выполнением сравнения, следовательно, равенство.
Мы можем продемонстрировать тот же эффект со строками и целыми числами: "12" == 12
верно, но "12" === 12
неверно.
Этот пример дает нам более простой способ обсудить ваш следующий пункт о добавлении одного к каждому из них. В приведенном выше примере добавление 1 к целому числу, очевидно, дает 13
, но со строкой "12" + 1
дает нам строку "121"
. Это имеет смысл, и вам бы этого не хотелось, но с помощью оператора двойного равенства два первых значения были представлены как равные.
Урок здесь заключается в том, чтобы всегда использовать оператор тройного равенства вместо двойного равенства, если только у вас нет особой необходимости сравнивать переменные разных типов.
Ваш последний пункт демонстрирует переменчивую природу null
в целом. Это своеобразный зверь, как скажет любой, кто когда-либо пытался работать с полем базы данных, обнуляемым. У Null есть очень специфическое определение в информатике, которое реализовано одинаково для нескольких языков, поэтому описанная вами ситуация не является особой странностью Javascript. Нуль странный. Не ожидайте, что оно будет вести себя как альтернативное имя для false
, потому что это не работает таким образом. Встроенное значение infinity
может вести себя так же странно и по тем же причинам.
Javascript имеет свою долю странности, хотя. Возможно, вам будет интересно прочитать http://wtfjs.com/,, в котором есть записи для целой загрузки странных вещей, которые делает Javascript. Многие из них связаны с null
и undefined
(знаете ли вы, что на самом деле можно переопределить значение встроенного объекта undefined
?!), и большинство из них приходят с объяснением того, как что на самом деле происходит и почему. Это может быть полезно, чтобы показать вам, почему все работает так, как они работают, и, безусловно, поможет вам показать, чего следует избегать! И если ничего другого, это делает хорошее развлекательное чтение, чтобы видеть некоторые из злоупотреблений, которые люди пытались бросить на плохой язык.