Создание и доступ к свойствам
Создание и доступ к свойствам
Создание объектов
// Объектный литерал — предпочтительный способ
const user = {
name: 'Иван',
age: 25,
'last name': 'Петров', // ключ с пробелом — в кавычках
};
// Вычисляемые ключи (ES6)
const field = 'email';
const user2 = {
[field]: 'ivan@example.com', // ключ из переменной
[`${field}_verified`]: false, // динамический ключ
};
// Сокращённые свойства (ES6)
const name = 'Иван';
const age = 25;
const user3 = { name, age }; // вместо { name: name, age: age }
Dot notation и Bracket notation
const user = { name: 'Иван', 'last name': 'Петров' };
// Dot notation — простые ключи
user.name // 'Иван'
user.age // undefined — нет такого свойства
// Bracket notation — динамические ключи или с пробелами
user['last name'] // 'Петров'
const key = 'name';
user[key] // 'Иван' — ключ из переменной
// Запись через bracket
user['newProp'] = 42;
Проверка наличия свойства
const obj = { a: 1, b: undefined };
// 'key' in obj — проверяет наличие свойства (включая undefined)
'a' in obj // true
'b' in obj // true — свойство есть, значение undefined
'c' in obj // false
// obj.key !== undefined — не надёжно!
obj.b !== undefined // false — свойство есть, но это undefined
obj.c !== undefined // false — свойства нет И оно undefined — не различить!
// Object.hasOwn — только собственные свойства (рекомендуется)
Object.hasOwn(obj, 'a') // true
Object.hasOwn(obj, 'b') // true
Используйте
Object.hasOwn(obj, key) для надёжной проверки — это современный замена obj.hasOwnProperty(key).Методы объекта
const user = {
name: 'Иван',
greet() {
return `Привет, ${this.name}!`;
},
// Эквивалент:
// greet: function() { ... }
};
user.greet(); // 'Привет, Иван!'
Object.create(proto) создаёт объект с указанным прототипом:
const animal = {
speak() {
return <code>${this.name} издаёт звук</code>;
}
};
const dog = Object.create(animal);
dog.name = 'Бобик';
dog.speak(); // 'Бобик издаёт звук' — метод из прототипа
// {} эквивалентно Object.create(Object.prototype)
В современном коде чаще используются классы, но Object.create полезен для создания объектов без прототипа: Object.create(null) — объект-словарь без inherited свойств.