Во-первых, давайте определим, что такое примитивные типы.
Примитивными типами в 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/”