ПОЧЕМУ НАЗНАЧЕНИЕ типа null RETURNS OBJECT? [Дубликат]

Вместо использования

NOT (ANY

попробуйте

(NONE
147
задан Matt Ball 15 September 2013 в 03:19
поделиться

5 ответов

Как уже отмечалось, спецификация говорит так. Но поскольку реализация JavaScript предшествует написанию спецификации ECMAScript, и спецификация была осторожна, чтобы не исправить недостатки первоначальной реализации, остается вопрос о том, почему это было сделано в первую очередь. Дуглас Крокфорд называет это ошибкой . Киро Риск считает, что это сорта имеет смысл :

. Поводом для этого является то, что null, в отличие от undefined, был (и до сих пор) используется, когда появляются объекты. Другими словами, null часто используется для обозначения пустой ссылки на объект. Когда Брендан Эих создал JavaScript, он следовал той же парадигме, и имело смысл (возможно) вернуть «объект». Фактически, спецификация ECMAScript определяет null как примитивное значение, которое представляет намеренное отсутствие какого-либо значения объекта (ECMA-262, 11.4.11).

20
ответ дан chryss 19 August 2018 в 12:43
поделиться
  • 1
    Поскольку я не могу найти сейчас видео, я опубликую его только для любопытных людей и без каких-либо ссылок: Крокфорд объяснил, как нулевое значение при разрешении типа null указывает на нулевой индексный элемент в массиве типов, так что это было ясно создавая ошибки, которые случайным образом распространяются в Microsoft при декомпиляции и перекомпиляции JS для своего браузера – Áxel Costas Pena 6 November 2013 в 00:00

Из книги YDKJS

Это давняя ошибка в JS, но, скорее всего, она не будет исправлена. Слишком много кода в Интернете зависит от ошибки и, таким образом, исправления, это вызовет намного больше ошибок!

4
ответ дан Faisal Ashfaq 19 August 2018 в 12:43
поделиться
  • 1
    не доверяйте всему, что написано в книге. Мне очень нравится эта книга, однако я не могу считать, что ошибка, потому что спецификация ECMA для JavaScript указывает, что тип null должен быть объектом. – andreasonny83 18 July 2018 в 21:32

Если null является примитивным, то почему typeof(null) возвращает «object»?

вкратце: это ошибка в ECMAScript, и тип должен be null

ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

5
ответ дан jobin 19 August 2018 в 12:43
поделиться
  • 1
    Нигде в вашей ссылке не говорится, что это ошибка. – user2867288 17 February 2017 в 21:42
  • 2
    И нигде в спецификации не говорится, что typeof должен возвращать что-либо, кроме «неопределенного», «объекта», «логического», «числа», «строки», «функции» и «символа», (ECMAScript 2015) – Brad Kent 11 July 2017 в 22:03

В первой реализации 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.

139
ответ дан Kagami Sascha Rosylight 19 August 2018 в 12:43
поделиться
  • 1
    Жаль, что это изменение, по крайней мере, не превратило его в строгий режим ... – Ingo Bürk 6 November 2013 в 22:57
  • 2
    Это интересная история. – Greg Herbowicz 12 November 2017 в 23:44

Если null является примитивным, то почему typeof(null) возвращает "object"?

Поскольку spec говорит так .

11.4.3 Оператор typeof

Произведение UnaryExpression : typeof UnaryExpression оценивается следующим образом:

  1. Пусть val является результатом оценки UnaryExpression .
  2. Если Тип ( val ) - Ссылка , затем & nbsp; & nbsp; a. Если значение IsUnresolvableReference ( val ) истинно, верните «undefined». & NBSP; & NBSP; & NBSP; б. Пусть val - GetValue ( val ).
  3. Возвращает строку, определенную Тип ( val ) в соответствии с Таблицей 20.

enter image description here [/g17]

55
ответ дан Matt Ball 19 August 2018 в 12:43
поделиться
  • 1
    @peter typeof ничего не говорит о том, вы можете вызывать методы на что-то. – Matt Ball 5 April 2017 в 18:07
  • 2
    Насколько мне известно, вы можете вызывать методы только на null и undefined. – Matt Ball 6 April 2017 в 02:23
  • 3
    @peter вы не можете вызывать методы в примитиве строк, но, к счастью, примитивы строк (и примитивы чисел и логические примитивы) неявно и автоматически «автоматически помещаются в коробки», в String, Number и Boolean wrappers, когда вы используете один из примитивов с оператором ссылки на свойство (. или [ ]). – Pointy 24 April 2017 в 22:05
Другие вопросы по тегам:

Похожие вопросы: