console.info(typeof(null)) //Object
Typeof(null) → Ошибка в том, что он возвращает тип Object, в то время как ожидается, что он вернет тип null. Эта ошибка - ситуация, пришедшая из первых версий JS, и это изменение состояния оставлено таким образом, потому что оно вызовет много проблем позже.
Если мы раскроем эту тему немного шире,
Как я уже упоминал в теме Типы данных JavaScript . JS состоит из 2 типов данных.
Примитивные типы и типы объект/функция. Примитивные типы - это типы данных, которые не могут быть изменены.
XY- 7-WZЕсли мы рассмотрим примитивные типы;
console.info(typeof(true)) //boolean console.info(typeof(null)) //object console.info(typeof(undefined)) //undefined console.info(typeof(1)) //number console.info(typeof('aaa')) //string console.info(typeof(Symbol("foo"))) //symbol console.info(typeof(BigInt(9007199254740991))) //bigint
Типы объектов и функций
console.info(typeof({})) //object console.info(typeof([])) //object console.info(typeof(new Set())) //object console.info(typeof(new Date())) //object console.info(typeof(new Map())) //object console.info(typeof((x)=>x+1)) //function
Typeof не дает вам подробного описания различных объектов, производных от типа object, он только говорит вам, что это объект. Чтобы подойти к нужному вам объекту более детально, необходимо посмотреть на прототип в конструкторе с instanceof , сделав ряд проверок.
Давайте после стольких подробностей перейдем к главному событию.
Typeof(null) -> object
Первая версия JS, которая описана в статье блога История "typeof null" , была разработана с помощью макроса C, в то время как первые 3 бита 32-битного поля в переменных определяют тип, следующие 29 бит - это часть, которая хранит данные. Как видно ниже, с помощью 3 битов можно создать 8 различных комбинаций типов.
В первое время JS хранятся следующие 5 типов данных.
Тот, что внизу, может быть либо 1, либо 1, что позволяет использовать 31-битное знаковое целое число, не тратя лишние 2 бита на определение Number. Или если он начинается с 0, то для определения типа используются 3 бита.
Кроме этого, существует 2 специальных типа
Для того чтобы код typeof правильно нашел Null, он должен был иметь ссылку, отличную от указателя NULL 0 в C. Но когда NULL-указатель 0 ссылается на 0, а распознавание объекта происходит через 0, null и объект смешиваются при определении типа.
Для продолжения этой статьи или для доступа к другим статьям в группе статей, вы можете перейти по этой ссылке .
JavaScript Başından Beri Bir Hatayı Bünyesinde mi Barındırıyor ? was originally published in Frontend Development With JS
on Medium, where people are continuing the conversation by highlighting and responding to this story.20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.