Это интересный и важный вопрос на собеседовании разработчика JavaScript. Давай исследуем это.
Примитивный тип:
В Javascript есть 5 типов данных, которые передаются по значению:
- Число
- Нить
- Логический
- Нулевой
- Не определить
Все это в JavaScript называется примитивным типом.
Тип ссылки:
Массив и Объекты - это данные ссылочного типа.
Узнайте, почему и как:
Посмотрите на код ниже.
Здесь на картинке [] === []
ложно, но 1 === 1
верно. Но в случае пустых массивов их значение и тип данных одинаковы. Тем не менее, почему это ложь? Опять же, почему 1 === 1
верно?
Это из-за разницы в примитивном типе и ссылочном типе.
То же самое происходит с Объектами. Посмотрите на код ниже.
Здесь значение и тип данных object1
и object2
совпадают. По-прежнему object1 === object2
неверно. Почему?
Посмотрите на картинку ниже, что здесь происходит -
Здесь значение и тип данных object1
и object2
одинаковы, но они не хранятся в одном и том же месте памяти. Вот почему мы получаем object1 === object2
это false
.
Если мы хотим получить true
, тогда сначала мы должны сослаться на object1
с другим объектом. Например, посмотрите на код ниже.
Здесь мы ссылаемся на object3
с object1
. В итоге object3 === object1
здесь правда. Так что же здесь происходит сейчас? Посмотрите на диаграмму ниже.
В этом случае object3
не занимают другое место в хранилище. Он использует ячейку памяти object1
. Вот почему object1 === object3
верно.
То же самое происходит с первыми примерами пустого массива. Поскольку для данных ссылочного типа ячейки памяти двух массивов различаются. Итак, [] === []
это false
.
Надеюсь, ваша путаница с данными примитивного и ссылочного типов понятна. Сообщите мне, если у вас возникнут какие-либо затруднения, а также сообщите, если я допустил ошибку. Спасибо.