Рубрики
Без рубрики

Примитивные типы против объектов в JavaScript

В чем основное различие между примитивными типами и объектами в JavaScript?

Во-первых, давайте определим, что такое примитивные типы.

Примитивными типами в JavaScript являются

  • струнные
  • числа (Число и BigInt)
  • логическое значение (истина или ложь)
  • не определено
  • Значения символов

null – это особый примитивный тип. Если вы запустите typeof null вы получите "объект" обратно, но на самом деле это примитивный тип.

Все, что не является примитивным типом, является объектом .

Функции тоже являются объектами. Мы можем устанавливать свойства и методы для функций. typeof вернет "функцию" но конструктор функций является производным от конструктора объектов.

Большие различия между примитивными типами и объектами заключаются в следующем

  • примитивные типы неизменяемы, объекты имеют только неизменяемую ссылку, но их значение может меняться с течением времени
  • примитивные типы передаются по значению. Объекты передаются по ссылке
  • примитивные типы копируются по значению. Объекты копируются по ссылке
  • примитивные типы сравниваются по значению. Объекты сравниваются по ссылке

Если мы скопируем примитивный тип таким образом:

let name = 'Flavio'
let secondName = name

Теперь мы можем изменить имя переменной, присвоив ей новое значение, но второе имя все еще содержит старое значение, потому что оно было скопировано по значению:

name = 'Roger'
secondName //'Flavio'

Если у нас есть объект:

let car = {
  color: 'yellow'
}

и мы копируем его в другую переменную:

let car = {
  color: 'yellow'
}

let anotherCar = car

в этом случае другой автомобиль указывает на тот же объект, что и автомобиль . Если вы установите

car.color = 'blue'

тоже

anotherCar.color

будет "синий" .

То же самое работает для передачи объектов функциям и для сравнения.

Допустим, мы хотим сравнить автомобиль с другим автомобилем :

anotherCar === car //true

Это верно, потому что обе переменные указывают на один и тот же объект.

Но если бы другой автомобиль был объектом с теми же свойствами, что и автомобиль , их сравнение дало бы ложный результат:

let car = {
  color: 'yellow'
}

let anotherCar = {
  color: 'yellow'
}

anotherCar === car //false

Оригинал: “https://flaviocopes.com/difference-primitive-types-objects/”