===
- оператор строгого равенства, он сравнивает как тип, так и значение.Значение null
является нулевым типом, который имеет ровно одно значение - null
.
Undefined - это неопределенный тип, который также имеет только одно значение - 'undefined'.
При использованииоператор строгого равенства, null! == undefined, поскольку они являются разными типами (см. шаг 1 Алгоритма сравнения строгого равенства, ECMA-262, § 11.9.6).
==
- оператор равенства.Сравнения с использованием ==
используют алгоритм сравнения абстрактного равенства (ECMA-262 § 11.9.3), который включает в себя:
- Если тип (x) совпадает с типом (y),затем ...
- Если x равно нулю, а y не определено, верните true.
- Если x не определено и y равно нулю, верните true.
Так null == undefined
возвращает истину по определению.Строго говоря, для проверки наличия свойства (независимо от его значения) следует использовать hasOwnProperty :
if (jsonobject.hasOwnProperty('tt')) {
// property exists
}
, однако на практике не существует большой разницы для строгого теста для undefined :
if (jsonobject.tt === undefined)
, поскольку свойство существует и имеет значение undefined или не определено вообще, обычно эквивалентно.Использование ===
также означает, что приведенное выше вернет false, если tt существует, но ему присвоено значение null
.