Объекты

В JavaScript есть специальные структуры данных, которые называются объектами (в других языках программирования они называются ассоциативными массивами или хешами).

Объекты создаются с помощью фигурных скобок { }, внутри которых пишутся элементы этого объекта в формате ключ: значение.

Давайте создадим пустой объект:

let obj = {};

А теперь создадим объект с данными:

let obj = {1: 'a', 2: 'b', 3: 'c'};

Выведем элемент объекта по его ключу:

console.log(obj[1]); // выведет 'a'

Строковые ключи объектов в JavaScript

Ключами объектов могут быть строки:

let obj = {'a': 1, 'b': 2, 'c': 3};

При этом ключи-строки принято в кавычки не брать:

let obj = {a: 1, b: 2, c: 3};

Давайте выведем элемент нашего объекта по ключу:

console.log(obj['a']); // выведет 1

Добавление элементов в объекты

В объекты можно добавлять новые элементы, записывая их в нужные ключи. Давайте посмотрим, как это делается. Пусть у нас есть следующий объект:

let obj = {};

Добавим в него новые элементы:

obj['a'] = 1;
obj['b'] = 2;
obj['c'] = 3;

Можно воспользоваться альтернативным синтаксисом:

obj.a = 1;
obj.b = 2;
obj.c = 3;

Проверим содержимое объекта:

console.log(obj);

Ключи объектов из переменных

Ключи объектов могут храниться в переменных. Посмотрим на примере. Пусть у нас есть следующий объект:

let obj = {a: 1, b: 2, c: 3};

Пусть в переменной хранится ключ:

let key = 'a';

Выведем элемент объекта по ключу:

console.log(obj[key]); // выведет 1

Вычисляемые свойства

При объявлении объекта имена его свойств могут браться из переменных. Такие свойства называются вычисляемыми. Давайте посмотрим, как это делается. Пусть у нас есть следующий объект:

let obj = {
a: 1,
b: 2,
c: 3
};

Пусть имя некоторого свойства хранится в переменной:

let key = 'a';

Давайте сделаем так, чтобы вместо имени свойства взялось значение из нашей переменной. Для этого переменную следует взять в квадратные скобки:

let obj = {
[key]: 1,
b: 2,
c: 3
};

При объявлении вычисляемых свойств можно выполнять некоторый код. Пример:

let obj = {
[key + '1']: 1,
[key + '2']: 2,
[key + '3']: 3
};

Передача объектов по ссылке

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

На практике это означает, что при записи объекта в другую переменную, обе переменных будут ссылаться на один и тот же объект. Давайте попробуем на практике. Пусть у нас есть следующий объект:

let obj1 = {a: 1, b: 2, c: 3};

Присвоим его из одной переменной в другую:

let obj2 = obj1;

Изменим одну из переменных:

obj2.a = '!';

В результате изменения будут видны и в другой переменной:

console.log(obj1); // {a: '!', b: 2, c: 3}

Константы с массивами или объектами

Константы, содержащие массивы и объекты, работают интересным образом. JavaScript не разрешает изменять значения этих констант, но изменять свойства объектов и значения элементов массивов - можно.

Давайте посмотрим на примерах. Пусть у нас дан вот такой объект:

const obj = {a: 1, b: 2, c: 3};

Давайте попробуем записать в него что-то другое:

obj = 123; // ошибка

Давайте попробуем записать в константу другой объект:

obj = {x: 1, y: 2, z: 3}; // ошибка

Однако, если мы попробуем изменить свойство объекта, то это сработает:

obj.a = '+'; // работает!