Ну, вы догадались, что слева = не так == неправильно (извините за это, но я давно хотел это сделать xD)

Ответ — «объект», да, typeof null возвращает object как тип в JavaScript. Я только вчера узнал об этом. Так что пришлось искать, потому что это не имело никакого смысла ;)

Вы можете подумать, что null — это примитивное значение, как его тип вернет object?? Читать вдоль…

Краткий ответ для быстрых читателей

Это не то, что он должен возвращать, да, вы все правильно прочитали!
Это давно известная проблема в JavaScript (или, можно сказать, в ECMAScript). Об этом есть комментарий в книге YDKJS:

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

Это связано с тем, как JavaScript фактически определяет тип данных переменной (объяснение в длинной части ниже).

Утверждение в блоге, которое я нашел значимым:

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

Было предложено исправление (попробуйте ознакомиться с предложением, очень интересно) для ECMAScript (через подписку), но оно, очевидно, было отклонено. Это привело бы к typeof null === null

Длинный ответ для любознательных парней

На самом деле существует логическое объяснение, объясняющее, почему null — это object in JavaScript.

В первоначальной версии JavaScript значения хранились в 32-битных единицах, которые состояли из небольшого тега типа (1–3 бита), а остальные содержали фактические данные значение. Теги типа хранились в младших битах единиц измерения. Их было пятеро:

000: object. The data is a reference to an object.
1: int. The data is a 31 bit signed integer.
010: double. The data is a reference to a double floating point number.
100: string. The data is a reference to a string.
110: boolean. The data is a boolean.

Таким образом, если младший бит равен «1», то длина тега type составляет всего один бит.
Если это '0', то тег типа имеет длину 3 бита, предоставляя два дополнительных бита для четырех типов.
Для object именно 000 определяло его тип, а nullбыло представлением null pointer. Однако в JavaScript, подобно C, не было указателей. Так что null ничего не означало, просто пустота, и в итоге представляло все 0. Все его 32 бита были 0. Поэтому всякий раз, когда интерпретатор JavaScript читает null, он считает первые 3 бита 000, что совпадает с object.

Вот почему typeof null возвращает "объект"

Источники: Блог Акселя Раушмайера || Переполнение стека

Я изо всех сил старался объяснить (*кашляет* копипаст из исходников *кашляет*), почему это происходит. Надеюсь, этот пост помог вам так или иначе!

Пока вы снова не прочитаете мой блог…!! 👋













Все, что вам нужно знать об «Fetch API
Вводное руководство по Fetch API в JavaScriptjavascript.plainenglish.io»