Алгоритм абстрактного равенства из раздела 11.9.3 спецификации языка - это то, что определяет ==
и !=
, и определяет их так, что
null == void 0
null == null
void 0 == null
где void 0
это просто надежный способ сказать undefined
(см. ниже), поэтому ответ на ваш вопрос - да, null
равен undefined и сам по себе, и ничего больше.
соответствующие части спецификации:
1. If Type(x) is the same as Type(y), then
If Type(x) is Undefined, return true.
If Type(x) is Null, return true.
...
2. If x is null and y is undefined, return true.
3. If x is undefined and y is null, return true.
...
Если вас беспокоит, что undefined
означает нечто иное, чем обычно, используйте void 0
.
null == void 0 // True
({}).x === void 0 // True
"undefined" === typeof void 0 // True
(function () {})() === void 0 // True
(undefined = 42,
undefined === void 0) // False
"undefined" === typeof undefined // False
"undefined" === typeof void 0 // True
Из спецификации языка :
11.4.2 Оператор void
Производство UnaryExpression: void UnaryExpression оценивается следующим образом:
- Пусть
expr
будет результатом вычисления UnaryExpression /. - Call
GetValue(expr)
. - Return undefined .
Таким образом, префиксный оператор void
оценивает свой аргументи возвращает специальное значение undefined независимо от того, на что была изменена глобальная переменная undefined
(или определено ли undefined
:).
EDIT: в ответ на комментарии
Если вы имеете дело с библиотечным кодом, который различает два, то вам нужно разобраться с разницей.Некоторые из новых библиотек, стандартизированных языковым комитетом, игнорируют разницу: JSON.stringify([void 0]) === "[null]"
, но существует слишком много кода, который обрабатывает их немного по-разному, и есть другие различия:
+(null) === 0
isNaN(+undefined)
"" + null === "null"
"" + undefined === "undefined"
Если вы 'Вы пишете любые виды библиотек, которые производят текст или сериализуют / десериализуют, и вы хотите объединить эти два, тогда вы не сможете пропустить undefined
и ожидать, что он будет вести себя как null
- вам нужно явно нормализовать ваши входные данные для одногоили другой.