Это интересный и важный вопрос на собеседовании разработчика JavaScript. Давай исследуем это.

Примитивный тип:

В Javascript есть 5 типов данных, которые передаются по значению:

  1. Число
  2. Нить
  3. Логический
  4. Нулевой
  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.

Надеюсь, ваша путаница с данными примитивного и ссылочного типов понятна. Сообщите мне, если у вас возникнут какие-либо затруднения, а также сообщите, если я допустил ошибку. Спасибо.