Вычисляемые свойства объекта в JavaScript
- Что такое вычисляемое свойство
- Свойство из переменной
- Выражение в квадратных скобках
- Чем отличается от обычного свойства
- Где это используется
- Итого
Вычисляемое свойство - это свойство, имя которого JavaScript получает из выражения прямо во время создания объекта.
let field = 'email';
let user = {
name: 'Анна',
[field]: 'anna@example.com',
};
console.log(user);
// { name: 'Анна', email: 'anna@example.com' }
Запись [field] означает: взять значение переменной field и использовать его как имя свойства.
Что такое вычисляемое свойство
Обычно имя свойства пишется в объекте напрямую.
let user = {
name: 'Анна',
age: 28,
};
Но иногда имя свойства заранее неизвестно. Например, оно хранится в переменной или собирается из нескольких частей.
Для этого имя свойства записывают в квадратных скобках.
let key = 'age';
let user = {
name: 'Анна',
[key]: 28,
};
Свойство из переменной
Самый частый вариант - создать свойство по имени из переменной.
let propertyName = 'price';
let product = {
title: 'Клавиатура',
[propertyName]: 2500,
};
console.log(product.price); // 2500
JavaScript сначала вычисляет выражение внутри скобок. В этом примере он получает строку ‘price’, а потом создает свойство price.
Выражение в квадратных скобках
В квадратных скобках может быть не только переменная, но и любое выражение, которое вернет имя свойства.
let prefix = 'user';
let data = {
[prefix + 'Id']: 15,
};
console.log(data.userId); // 15
Сначала выполняется выражение prefix + ‘Id’. Получается строка ‘userId’, и она становится именем свойства.
Можно использовать и функцию, если она возвращает строку.
function getFieldName() {
return 'status';
}
let task = {
title: 'Написать статью',
[getFieldName()]: 'in progress',
};
console.log(task.status); // in progress
Чем отличается от обычного свойства
Важно не путать обычное имя свойства и вычисляемое.
let key = 'email';
let user = {
key: 'anna@example.com',
};
console.log(user);
// { key: 'anna@example.com' }
Здесь создается свойство с именем key. JavaScript не смотрит, что лежит в переменной key.
Если нужно использовать значение переменной, нужны квадратные скобки.
let key = 'email';
let user = {
[key]: 'anna@example.com',
};
console.log(user);
// { email: 'anna@example.com' }
Где это используется
Вычисляемые свойства удобны, когда объект нужно собрать по данным, которые приходят извне.
function createFilter(field, value) {
return {
[field]: value,
};
}
let filter = createFilter('category', 'books');
console.log(filter);
// { category: 'books' }
Функция createFilter() не привязана к конкретному имени свойства. Она получает имя в параметре field и создает объект с нужным ключом.
Такой прием часто встречается при работе с формами, фильтрами, настройками и параметрами для API.
Итого
- Вычисляемое свойство создается через квадратные скобки внутри объекта:
[key]: value. - JavaScript сначала вычисляет выражение в скобках, а потом использует результат как имя свойства.
key: valueсоздает свойствоkey, а[key]: valueберет имя из переменной.- Этот синтаксис полезен, когда объект собирается из динамических данных.