delete в JavaScript

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 обычно не используют, потому что он оставляет пустые ячейки.