Вместо использования
NOT (ANY
попробуйте
(NONE
Как уже отмечалось, спецификация говорит так. Но поскольку реализация JavaScript предшествует написанию спецификации ECMAScript, и спецификация была осторожна, чтобы не исправить недостатки первоначальной реализации, остается вопрос о том, почему это было сделано в первую очередь. Дуглас Крокфорд называет это ошибкой . Киро Риск считает, что это сорта имеет смысл :
. Поводом для этого является то, что
blockquote>null
, в отличие отundefined
, был (и до сих пор) используется, когда появляются объекты. Другими словами,null
часто используется для обозначения пустой ссылки на объект. Когда Брендан Эих создал JavaScript, он следовал той же парадигме, и имело смысл (возможно) вернуть «объект». Фактически, спецификация ECMAScript определяетnull
как примитивное значение, которое представляет намеренное отсутствие какого-либо значения объекта (ECMA-262, 11.4.11).
Из книги YDKJS
Это давняя ошибка в JS, но, скорее всего, она не будет исправлена. Слишком много кода в Интернете зависит от ошибки и, таким образом, исправления, это вызовет намного больше ошибок!
blockquote>
Если
blockquote>null
является примитивным, то почемуtypeof(null)
возвращает «object
»?вкратце: это ошибка в ECMAScript, и тип должен be
null
ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null
В первой реализации JavaScript значения JavaScript были представлены как тег типа и значение, причем тег типа для объектов, являющихся 0
, и null
был представлен как указатель NULL
(0x00
on большинство платформ). В результате, null имел 0
как тег типа, поэтому возвращаемое значение fog typeof
( reference ).
typeof null === 'object'; // This stands since the beginning of JavaScript
Было предложено «исправить» для ECMAScript (через опцию). Это привело бы к:
typeof null === 'null'
... но это изменение было отклонено , из-за проблем с кодом, используя этот конкретный «quirk» для проверки на null
.
Если
blockquote>null
является примитивным, то почемуtypeof(null)
возвращает"object"
?Поскольку spec говорит так .
11.4.3 Оператор
typeof
Произведение UnaryExpression :
typeof
UnaryExpression оценивается следующим образом:
- Пусть val является результатом оценки UnaryExpression .
- Если Тип ( val ) - Ссылка , затем & nbsp; & nbsp; a. Если значение IsUnresolvableReference ( val ) истинно, верните «
undefined
». & NBSP; & NBSP; & NBSP; б. Пусть val - GetValue ( val ).- Возвращает строку, определенную Тип ( val ) в соответствии с Таблицей 20.
[/g17]
blockquote>
typeof
ничего не говорит о том, вы можете вызывать методы на что-то.
– Matt Ball
5 April 2017 в 18:07
null
и undefined
.
– Matt Ball
6 April 2017 в 02:23
.
или [ ]
).
– Pointy
24 April 2017 в 22:05