tgoop.com/prog_way_blog/202
Last Update:
Ссылочные типы и типы значений в JavaScript
Перед прочтением я рекомендую пробежаться по ещё одному посту из канала о том, какие типы данных есть в JavaScript.
В языке JavaScript, типы данных можно разделить на две большие группы:
Типы значений — примитивы — данные, что языком воспринимаются по конкретному значению. Например, строка "Hello, World!"
или число 5
.
Ссылочные типы — типы данных, которые интерпретатор языка воспринимает по ссылке. Переменная больше не хранит в себе конкретное значение, зато сохраняет ссылку на место в памяти, где это самое значение хранится.
К ссылочным типам данных относятся:
— объекты
— массивы
— функции
Казалось бы, а какая разница? Но разница заключается в способе хранения и передачи этих самых данных через переменные, а так же в способе взаимодействия с ними.
Типы значений потому и называются примитивами, так как максимально просты и предсказуемы в этом плане. Такие переменные, по сути, представляют собой просто некоторую последовательность байт. При сравнении таких переменных, всё, что нужно сделать языку — посимвольно сравнить цепочки байт и выдать результат.
Ссылочные же типы, в свою очередь, могут вызвать много проблем при работе с ними. Переменная сохраняет под собой не конкретную последовательность байт, а, как и говорилось выше, лишь некоторую ссылку на ячейку памяти, в которой нужная для нас информация (байты) и записаны. Из ключевых особенностей таких типов данных сразу же приходит на ум их копирование, с чем часто возникают проблемы у новичков и не только.
Например, в этом случае мы получаем не ожидаемый для многих вывод в консоль:
const obj = {
name: "Denis",
address: {
street: 'Lenina',
apartment: 10
}
}
const clone = Object.assign({}, obj)
obj.address.street = 'Pushkina'
console.log(clone.address.street) // Pushkina
Связано это со спецификой работы
Object.assign
и особенностями копирования вложенных объектов. В этом случае копирование считается неглубоким, поэтому скопированный объект также изменяется.Более подробно о понятии глубокого копирования я расскажу в отдельном посте. Он будет одним из следующих.
#javascript #data #theory #useful
BY progway — программирование, IT
Share with your friend now:
tgoop.com/prog_way_blog/202