delete в JavaScript
- Что делает delete
- Синтаксис
- Удаление через точку
- Удаление через квадратные скобки
- Если свойства нет
- delete и undefined
- delete и const
- delete и массивы
- Итого
delete удаляет свойство из объекта.
let user = {
name: 'Анна',
age: 28,
};
delete user.age;
console.log(user); // { name: 'Анна' }
После удаления свойства age в объекте больше нет.
Что делает delete
delete удаляет из объекта пару ключ: значение.
let product = {
title: 'Клавиатура',
price: 2500,
inStock: true,
};
delete product.inStock;
console.log(product);
// { title: 'Клавиатура', price: 2500 }
Важно: delete удаляет свойство, а не просто очищает его значение.
Синтаксис
delete object.property;
delete object['property'];
Через точку удобно удалять обычные свойства, имя которых известно заранее.
Через квадратные скобки удаляют свойства с необычными именами или свойства, имя которых лежит в переменной.
Удаление через точку
Если имя свойства простое, используйте точку.
let user = {
name: 'Анна',
city: 'Москва',
};
delete user.city;
console.log(user); // { name: 'Анна' }
Такой вариант хорошо читается и подходит для большинства обычных случаев.
Удаление через квадратные скобки
Квадратные скобки нужны, если имя свойства хранится в переменной.
let user = {
name: 'Анна',
age: 28,
};
let field = 'age';
delete user[field];
console.log(user); // { name: 'Анна' }
JavaScript берет значение переменной field и удаляет свойство age.
Скобки также нужны для свойств с пробелами, дефисами и другими символами.
let product = {
title: 'Книга',
'old-price': 1500,
};
delete product['old-price'];
console.log(product); // { title: 'Книга' }
Если свойства нет
Если удалить свойство, которого нет, ошибки не будет.
let user = {
name: 'Анна',
};
delete user.age;
console.log(user); // { name: 'Анна' }
Для JavaScript такая операция считается нормальной: свойства нет до удаления и нет после удаления.
delete и undefined
Удалить свойство и записать в него undefined - это разные действия.
let user = {
name: 'Анна',
email: 'anna@example.com',
};
delete user.email;
console.log('email' in user); // false
После delete свойства email в объекте нет.
let user = {
name: 'Анна',
email: undefined,
};
console.log('email' in user); // true
Здесь свойство осталось, просто его значение равно undefined.
Если поле должно остаться в объекте, но значения пока нет, часто используют null или undefined. Если поле больше не нужно, его можно удалить через delete.
delete и const
const не запрещает удалять свойства объекта.
const user = {
name: 'Анна',
age: 28,
};
delete user.age;
console.log(user); // { name: 'Анна' }
Переменная user все еще ссылается на тот же объект. Мы не присваиваем ей новый объект, а меняем содержимое старого.
delete и массивы
Оператор delete можно применить к элементу массива, но обычно так не делают.
let numbers = [10, 20, 30];
delete numbers[1];
console.log(numbers); // [10, empty, 30]
console.log(numbers.length); // 3
Элемент удалился, но длина массива не изменилась. В массиве появилась пустая ячейка.
Если нужно удалить элемент из массива, чаще используют методы массивов, например splice().
let numbers = [10, 20, 30];
numbers.splice(1, 1);
console.log(numbers); // [10, 30]
delete лучше воспринимать как инструмент для удаления свойств объекта, а не элементов массива.
Итого
deleteудаляет свойство объекта.- Через точку удаляют свойства с простыми именами.
- Через квадратные скобки удаляют свойства с именем из переменной или необычным именем.
deleteотличается от записиundefined: свойство исчезает из объекта.constне мешает удалять свойства объекта.- Для массивов
deleteобычно не используют, потому что он оставляет пустые ячейки.