Добавление и удаление свойств объекта в JavaScript
- Что делает присваивание
- Добавление через точку
- Добавление через квадратные скобки
- Имя свойства в переменной
- Изменение существующего свойства
- Удаление свойства через delete
- Удалить или очистить значение
- Объект, объявленный через const
- Итого
Свойства объекта можно добавлять после создания объекта, изменять и удалять. В JavaScript объект не обязан сразу содержать все возможные данные.
let user = {
name: 'Анна',
};
user.age = 28;
console.log(user); // { name: 'Анна', age: 28 }
В этом примере у объекта сначала было только свойство name, а затем появилось свойство age.
Что делает присваивание
Для добавления и изменения свойства используется обычное присваивание через знак =.
object.property = value;
Если свойства с таким именем нет, оно будет создано. Если свойство уже есть, его значение изменится.
let user = {};
user.name = 'Анна'; // добавили свойство
user.name = 'Мария'; // изменили свойство
console.log(user.name); // Мария
Добавление через точку
Если имя свойства простое и заранее известно, удобнее использовать точку.
let product = {};
product.title = 'Клавиатура';
product.price = 2500;
product.inStock = true;
console.log(product);
Такой вариант хорошо читается и подходит для большинства обычных свойств.
Добавление через квадратные скобки
Квадратные скобки нужны, когда имя свойства записано строкой или содержит пробелы, дефис и другие символы.
let product = {};
product['main category'] = 'accessories';
product['item-code'] = 'kb-102';
console.log(product['main category']); // accessories
console.log(product['item-code']); // kb-102
Через точку к таким свойствам обратиться не получится, поэтому для них используют скобки.
Имя свойства в переменной
Иногда имя свойства становится известно только во время выполнения программы. В таком случае его можно взять из переменной.
let user = {
name: 'Анна',
};
let field = 'email';
user[field] = 'anna@example.com';
console.log(user.email); // anna@example.com
В переменной field лежит строка ‘email’. Поэтому запись user[field] создает свойство email.
Изменение существующего свойства
Изменение выглядит так же, как добавление. Разница только в том, что свойство уже есть в объекте.
let task = {
title: 'Выучить объекты',
done: false,
};
task.done = true;
console.log(task.done); // true
Через скобки это работает так же.
let task = {
title: 'Выучить объекты',
done: false,
};
let field = 'done';
task[field] = true;
console.log(task.done); // true
Удаление свойства через delete
Для удаления свойства используют оператор delete.
let user = {
name: 'Анна',
age: 28,
city: 'Москва',
};
delete user.city;
console.log(user); // { name: 'Анна', age: 28 }
delete удаляет из объекта всю пару ключ: значение.
Если имя свойства хранится в переменной, удаление также делают через квадратные скобки.
let user = {
name: 'Анна',
age: 28,
};
let field = 'age';
delete user[field];
console.log(user); // { name: 'Анна' }
Если свойства нет, delete не вызовет ошибку.
let user = {
name: 'Анна',
};
delete user.age;
console.log(user); // { name: 'Анна' }
Удалить или очистить значение
Удаление свойства и очистка значения - это разные действия.
let user = {
name: 'Анна',
city: 'Москва',
};
delete user.city;
console.log('city' in user); // false
После delete свойства city в объекте больше нет.
let user = {
name: 'Анна',
city: null,
};
console.log('city' in user); // true
Здесь свойство city осталось, но его значение пустое. Такой вариант используют, когда поле должно быть в объекте, но значения пока нет.
Объект, объявленный через const
const запрещает присвоить переменной новый объект, но не запрещает менять свойства уже созданного объекта.
const user = {
name: 'Анна',
};
user.age = 28;
delete user.name;
console.log(user); // { age: 28 }
Такой код работает, потому что переменная user по-прежнему ссылается на тот же объект.
const user = {
name: 'Анна',
};
user = {}; // ошибка
А вот заменить объект целиком уже нельзя.
Итого
- Присваивание добавляет новое свойство или изменяет существующее.
- Через точку удобно добавлять свойства с простыми именами.
- Квадратные скобки нужны для сложных имен и имен из переменных.
deleteудаляет свойство из объекта полностью.nullоставляет свойство в объекте, но показывает, что значения нет.- У объекта, объявленного через
const, свойства все равно можно менять.