Оператор delete
Оператор delete у JavaScript використовується для видалення властивостей з об'єктів (або елементів з масивів).
Але в нього є кілька тонких нюансів, які варто знати.
Розберемо детально.
Синтаксис
delete object.propertyабо
delete object['property']Приклад з об'єктом
const user = {
name: 'Tim',
age: 25
};
delete user.age;
console.log(user); // { name: 'Tim' }
console.log('age' in user); // falseОператор
deleteвидаляє саму властивість з об'єкта, а не просто її значення.
Значення, що повертається
delete повертає логічне значення:
| Випадок | Повертає |
|---|---|
| Видалення пройшло успішно | true |
| Видалити неможливо (наприклад, властивість «неконфігурована») | false |
Приклад:
const obj = {};
Object.defineProperty(obj, 'x', { value: 10, configurable: false });
console.log(delete obj.x); // false
console.log(obj.x); // 10Приклад з масивом
const arr = [10, 20, 30];
delete arr[1];
console.log(arr); // [10, <1 empty item>, 30]
console.log(arr.length); // 3Важливо:
deleteне зсуває елементи масиву, він просто видаляє значення, залишаючи «дірку» (empty).
Якщо потрібно видалити елемент зі зміною довжини масиву, використовуй методи:
arr.splice(1, 1); // видалить елемент і зсуне іншіПриклад з об'єктом і undefined
Різниця між delete і присвоєнням undefined:
const user = { name: 'Tim', age: 25 };
user.age = undefined;
console.log(user); // { name: 'Tim', age: undefined }
console.log('age' in user); // true (ключ залишився)
delete user.age;
console.log(user); // { name: 'Tim' }
console.log('age' in user); // false (ключ видалено)
deleteвидаляє ключ повністюundefined- просто обнуляє значення
Приклад з прототипом
delete не зачіпає властивості, успадковані через прототип:
const person = { name: 'Alex' };
const user = Object.create(person);
console.log('name' in user); // true
delete user.name; // не видалить з прототипу
console.log('name' in user); // trueВін видаляє тільки власні властивості об'єкта.
Обмеження
deleteне працює зі змінними, оголошеними черезvar,let,const:
let x = 10;
console.log(delete x); // false
console.log(x); // 10Видалити можна тільки властивість об'єкта, але не змінну.
- У строгому режимі (
"use strict") спроба видалити недопустиму властивість викличе помилку:
"use strict";
delete Object.prototype; // TypeErrorПідсумок
| Що робить | Видаляє властивість з об'єкта |
|---|---|
| Працює з | Об'єктами, масивами |
| Повертає | true або false |
| Не працює для | Змінних (var, let, const) |
| Не зсуває елементи масиву | Залишає «дірку» |
| Безпечно для | Власних властивостей об'єкта |
Коротко
const obj = { a: 1, b: 2 };
delete obj.a;
console.log(obj); // { b: 2 }
console.log('a' in obj); // falseКоротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.