Это одна из небольших, но важных концепций, с которыми должен быть знаком JS-разработчик.

Поскольку Javascript — это свободно типизированный язык, мы можем просто объявить блок памяти и присвоить его строке, числу, массиву или объекту. Мы должны назначить ссылку на память для любого из типов данных. Но это не концепция со строго типизированным языком. Вы должны определить тип переменной перед присвоением какого-либо значения. Такие языки, как C, C++, Java и многие другие, строго типизированы. Если вы пришли из строго типизированного языкового фона, эта концепция поначалу покажется вам шокирующей.

Итак, давайте начнем с разницы между примитивными и непримитивными типами данных в JS.

В JS есть 7 основных примитивных типов данных.

  1. Число
  2. BigInt
  3. Нить
  4. логический
  5. Нулевой
  6. Неопределенный
  7. Символы

В JS есть только 1 непримитивный тип данных

  1. Объекты (также включает массивы).

В чем принципиальная разница между ними?

Для всех типов данных-примитивов можно присвоить заданное типизированное значение, чего нельзя делать в случае с не-примитивами. Поясним это на некоторых примерах.

Давайте рассмотрим переменную, которой присвоено значение строки, теперь, если я добавлю к ней 10, она преобразует 10 в строку и добавит ее после строки, и результирующий тип будет строкой. Вы можете попробовать это на типах данных и посмотреть результат.

Теперь давайте рассмотрим объект как объект со свойствами типа var1 и var2. одному присваивается строка, а другому присваивается номер.

Я надеюсь, что это основное различие теперь вам ясно.

Для получения более подробной информации об этом, вы можете обратиться по ссылке ниже.



Разница в типе ссылки

В примитивных типах данных, если им присвоено другое значение, их ссылка всегда меняется, но этого не происходит в понятии не-примитивов.

Рассмотрим приведенный выше пример, что будет выведено на консоль для этого. Мы можем просто думать об этом как о том, что a и b сравниваются со значениями, которые они содержат, так что вывод верно в обоих случаях.

Рассмотрим приведенный выше пример, что будет выведено на консоль для этого. Мы можем просто думать об этом как о том, что obj и obj2 ссылаются на разные блоки памяти, поэтому могут ли они быть равны? Никогда, поэтому консольный вывод будет ложным.

Некоторые разработчики считают, что === сравнивает только тип, а не значение, что неверно. Он сравнивает как типы, так и значения.