Удаление оператора не очень часто используется в JavaScript, но его характеристики действительно очень странные.
1. Удалите свойства объекта, код:
Кода -копия выглядит следующим образом:
var o = {
A: 1,
B: 2
};
Удалить ОА;
блюд (OA); //неопределенный
Итак, удален ли атрибут объекта или значение атрибута объекта? Я начал думать, что удаление должно быть значением, потому что результат не определен и нет ошибки. Но на самом деле, мое мнение неверно, приведите пример:
Кода -копия выглядит следующим образом:
var O = {};
var a = {
Pro: "Женн"
};
oc = a;
удалить OC; // Удалить свойство a объекта o
console.log (OC); // неопределенный
Console.log (A.pro); // Чжэнн
Через приведенный выше код нетрудно увидеть, что после удаления OC значение, указанное OC, не удалено, то есть объект A все еще существует, в противном случае A.Pro не может иметь возможность пройти уровень компиляции. Говоря об этом, можно понять, что удаление удаляет атрибуты объекта таким образом, что на самом деле эквивалентно удалению ссылки на значение атрибута в объекте, но это значение все еще находится в стеке объектов!
2. Для работы массива сначала посмотрите на код:
Кода -копия выглядит следующим образом:
var arr = [1,2,3];
Удалить arr [2];
console.log (arr.length); // 3
console.log (arr); // [1,2, неопределенно]
Было еще раз доказано, что удаление на самом деле не удаляет элемент, он просто удаляет значение ключа, соответствующее элементу. Чтобы дополнительно понять суть удаления, сравните его с методом POP в массиве. следующее:
Кода -копия выглядит следующим образом:
var arr = [1,2,3];
arr.pop ();
console.log (arr); // [1,2]
Console.log (arr.length) // 2
Правда должна быть раскрыта сейчас.
3. Вышеуказанные операции по объектам и массивам легко понять, но операции по переменным неизбежно трудно понять. Код заключается в следующем:
Кода -копия выглядит следующим образом:
var a = 1;
Удалить;
предупреждение (а); // 1
Функция fn () {return 42; }
Удалить FN;
оповещение (fn ()); // 42
b = 2;
удалить B;
предупреждение (б); // b не определен;
Это трудно объяснить. Это также глобальная переменная, но переменная B, объявленная VAR, не может быть удалена. Невозможно сказать, что удаление очень странно. В объяснении, данном ECMA, это только означает, что переменные, объявленные через VAR, и функции, объявленные с помощью функции, имеют функцию DontDelete и не могут быть удалены.