В Javascript, как мы все знаем, типы данных, такие как числа, строки и логические значения, используются по значению, а объекты с другой стороны используются по ссылке.

Кратко об объектах

С помощью объекта мы можем изменить значение объекта, изменив его свойства. Когда мы сравниваем объекты, мы, по сути, сравниваем адрес, по которому хранится объект, а не фактические значения. В JavaScript нет встроенной операции «глубокого» сравнения, которая просматривает содержимое объекта, но ее можно написать самостоятельно

var object1 = {значение: 20};
var object2 = object1;
var object3 = {value: 20};

console.log(object1 == object2);
// → true
console.log(object1 == object3);
// → false

Что такое неизменность и зачем она нужна?

Неизменяемый означает «то, что нельзя изменить». Это то, что это означает с точки зрения javascript, каждая переменная хранится в каком-то физическом месте, то есть у каждой переменной есть адрес. Значение по этому адресу не может быть изменено. Это неизменно.

Пример :

var str = «Привет, мир!»;
var res = str.slice(1, 5);

Здесь метод slice не изменяет значение, хранящееся там, где хранится «str», он фактически возвращает новую строку, которая назначается «res».

На самом деле числа, строки и логические значения неизменяемы.

Но в случае массивов и объектов можно изменить значение, что означает, что они изменяемы.

var obj1= {val: ‘Объект здесь’}

obj1.name = ‘obj1’;

console.log(obj1);

// Выводит {name: obj1, val: ‘Объекты здесь’}

Все объекты и массивы изменяемы.

Как сделать массивы или объекты изменяемыми?

Это большой вопрос, и это очень распространенная потребность. Это основа React/Redux, гарантирующая, что один из столпов редукции «состояние», который по сути является объектом, всегда должен быть неизменным.

Есть много способов добиться этого:

  1. Использование пользовательской библиотеки, такой как immutableJS от facebook, помогает нам достичь этого.
  2. Использование Object.assign() [функция ES6]

const person = {имя: «Джон», возраст: 28}

const newPerson = Object.assign({}, человек, {возраст: 30})

console.log(newPerson === человек) // false

console.log(человек) // {имя: «Джон», возраст: 28}

console.log(newPerson) // {имя: «Джон», возраст: 30}

Это все.

Удачных иммутантов!!