Объекты же используются для хранения коллекций различных значений и более сложных сущностей. У объектов в JavaScript есть свойства: это пары «ключ: значение». Объект может быть создан с помощью фигурных скобок {…} с необязательным списком свойств:
let название_объекта = {
ключ: значение,
ключ: значение,
...
}
Свойство — это пара «ключ: значение», где ключ — это строка (также называемая «именем свойства»), а значение может быть чем угодно.
Имя свойства может состоять из нескольких слов, но тогда оно должно быть заключено в кавычки:
let user = {
name: "John",
age: 30,
"likes birds": true // имя свойства из нескольких слов должно быть в кавычках
};
Мы можем использовать квадратные скобки в литеральной нотации для создания вычисляемого свойства:
let fruit = prompt("Какой фрукт купить?", "apple");
let bag = {
[fruit]: 5, // имя свойства будет взято из переменной fruit
};
alert( bag.apple ); // 5, если fruit="apple"
Пустой объект можно создать, используя один из двух вариантов синтаксиса:
let user = new Object(); // синтаксис "конструктор объекта"
let user = {}; // синтаксис "литерал объекта"
К свойству объекта можно обратиться через точечную нотацию: название_объекта.свойство или записать свойство в квадратных скобках. В них нужно передать значение ключа строкой, т. е. в кавычках: название_объекта['свойство'].
В квадратные скобки можно передать переменную. Это удобно, если имя ключа неизвестно на момент написания кода.
Чтобы удалить свойство объекта используют оператор delete:
const obj = { one: 1 };
delete obj.one;
Проверить, есть ли ключ в объекте, можно оператором in. Для этого нужно указать имя ключа в кавычках, затем написать in и имя объекта, в котором ищем это свойство:
const whoIsAtHome = { // англ. who is at home, «кто есть дома?»
father: 'папа',
mother: 'мама'
};
console.log('father' in whoIsAtHome); // true
Для перебора всех свойств объекта используется цикл for..in:
for (key in object) {
// тело цикла выполняется для каждого свойства объекта
}
Object
Object — доступный в JavaScript глобальный объект. Он создаётся, как только вы открываете браузер. У него много полезных методов.
Массив ключей объекта удобно получить, передав объект как аргумент методу Object.keys:
Object.keys({ name: 'Алан', surname: 'Кей' }); // ["name", "surname"]
Метод Object.values возвращает значения всех свойств и методов объекта, а Object.entries — все пары «ключ-значение». Есть нюанс: эти свойства не поддерживает даже последняя версия Internet Explorer.
Для копирования объектов (чтобы создать независимую копию, так как объекты копируются по ссылкам) используют метод метод Object.assign:
Object.assign(dest, [src1, src2, src3...])
- Первый аргумент dest — целевой объект.
- Остальные аргументы src1, ... , srcN (может быть столько, сколько нужно)) являются исходными объектами
- Метод копирует свойства всех исходных объектов src1, ... , srcN в целевой объект dest. То есть, свойства всех перечисленных объектов, начиная со второго, копируются в первый объект.
- Возвращает объект dest.
Пример:
let user = { name: "Иван" };
let permissions1 = { canView: true };
let permissions2 = { canEdit: true };
// копируем все свойства из permissions1 и permissions2 в user Object.assign(user, permissions1, permissions2);
// теперь user = { name: "Иван", canView: true, canEdit: true }