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