Delete - javascript, mdn

де результат обчислення виразу повинен бути посиланням на властивість (об'єкта), наприклад:

Якщо результат обчислення виразу не є властивістю (об'єкта), delete нічого не робить.

object Ім'я об'єкта або вираз, результатом обчислення якого є об'єкт. property видаляти властивість. index Ціле число, яке представляє собою індекс масиву, який повинен бути знищений.

значення, що повертається

Повертає false, тільки якщо властивість існує в самому об'єкті, а не в його прототипах, і не може бути видалено. У всіх інших випадках повертає true.

Якщо оператор delete успішно виконує видалення, він повністю видаляє властивість з об'єкта. Однак, якщо властивість з таким же ім'ям існує в ланцюжку прототипів, об'єкт успадкує це властивість з прототипу.

delete ефективний тільки стосовно до властивостей об'єктів. Він не робить ніякого впливу на імена змінних і функцій.
Присвоєння значення властивості без вказівки об'єкта (без оператора var) іноді невірно характеризується, як глобальна змінна, (наприклад x = 5). Насправді відбувається привласнення значення властивості глобального об'єкта.

delete не може видалити певні властивості вбудованих об'єктів (таких як Object, Array, Math і так далі). У специфікації ECMA-262 вони позначені як DontDelete.

Якщо об'єкт успадковує властивість від прототипу і не має власного властивості з таким же ім'ям, властивість не може бути видалено при звернення через цей об'єкт. Однак можна видалити це властивість безпосередньо в прототипі.

Видалення елементів масиву

Коли за допомогою оператора delete втечуть елемент масиву, довжина масиву не змінюється. Наприклад, якщо ви знищите a [3], a [4] як і раніше a [4], а a [3] не визначене. Так буде навіть якщо ви знищите останній елемент масиву (delete a [a.length-1]).

Коли оператор delete видаляє елемент масиву, цей елемент більше не існує в масиві. У наступному прикладі, trees [3] видаляється з допомогою delete.

Якщо Ви хочете, щоб елемент масиву існував, але мав значення undefined, використовуйте значення undefined замість оператора delete. У наступному прикладі, trees [3] приймає значення undefined, але елемент масиву все ще існує:

проблема кросбраузерності

Незважаючи на те, що стандарт ECMAScript залишає порядок ітерації за властивостями об'єктів на розсуд реалізує боку, може виявитися так, що всі основні браузери підтримують порядок ітерації, заснований на принципі "властивість доданий в об'єкт раніше йде раніше" (принаймні для властивостей які не перебувають в прототипі). Однак, у випадку з Internet Explorer, коли хто-небудь використовує delete з будь-яким властивістю, це призводить до деяких несподіваних результатів, змушуючи інші браузери відмовитися від використання простих об'єктів, таких як літерали об'єктів, як асоціативних масивів. В Internet Explorer, коли значення властивості встановлено в undefined, після видалення цієї властивості, якщо хто-небудь пізніше додасть властивість з таким же ім'ям, воно виявиться в своїй старій позиції, а не в кінці ітераційної послідовності, як очікується.

Тому, якщо Ви хочете симулювати упорядкований асоціативний масив в кросбраузерності середовищі, вам доведеться або використовувати два окремих масиву (один для ключів і один для значень), або побудувати масив з об'єктів з одним властивістю і так далі.

зовнішні посилання