1. Переменные
Когда дело доходит до оператора удаления в JavaScript, мы должны сначала выяснить взаимосвязь между переменными и атрибутами в JavaScript.
В JavaScript взаимосвязь между переменными и атрибутами объекта очень тонкая, и ее можно даже приравнивать много раз, потому что JavaScript создаст глобальный объект перед выполнением сценария, который является объектом окон в браузере. Все глобальные переменные являются атрибутами этого глобального объекта. При выполнении функции также будет создан объект активации. Все локальные переменные являются атрибутами этого объекта активации. Вы можете узнать об этих прицелах и закрытии JavaScript.
Кода -копия выглядит следующим образом:
// атрибуты, объявленные в прототипе, не могут быть удалены
var global = 1;
это. Global; // 1, вы можете получить доступ к глобальным объектам через это
this.global2 = 2;
Global2; // 12
функция foo () {
var local = 36;
// Однако активация не может быть доступна напрямую.
// Следовательно, локальная переменная не может быть доступна через foo.local
}
Похоже, что переменные эквивалентны свойствам объектов, но на самом деле они не одинаковы, по крайней мере, для оператора удаления. Насколько я понимаю, объявления переменных должны быть завершены с помощью операторов VAR. Глобальные переменные, которые не объявляются с помощью операторов VAR, являются все свойства оконных объектов. Это позволяет легко понять взаимосвязь между переменными и свойствами объекта.
2. Удалить оператор
Оператор удаления используется для удаления свойств объекта. Для эталонных значений типа он также удаляет свойства объекта сами и не удаляет объект, на который указан свойство. Если у вас есть какие -либо вопросы, вы можете посмотреть на значения основного типа и типа ссылки или проверить следующий код:
Кода -копия выглядит следующим образом:
var O = {};
var a = {x: 10};
oa = a;
Удалить ОА; // атрибут OA удален
console.log (oa); // неопределенный
console.log (ax); // 10, потому что объект {x: 10} все еще ссылается на A, поэтому он не будет переработан
Кроме того, удаление OX также может быть написано как Delete O ["x"], а эффекты обоих одинаковы.
3. переменные нельзя удалить
Переменные, объявленные VAR, и функции, объявленные функцией, имеют функцию DontDelete и не могут быть удалены. Глобальные переменные, не объявленные через VAR (свойства глобальных объектов)
Кода -копия выглядит следующим образом:
var global = {
A: 123,
b: {
C: 1345
}
};
Удалить Global; //Неверный
Console.log (Global)
obj = {
A: 123
};
Удалить OBJ; // Удалить глобальные переменные OBJ, атрибут obj объекта окна
console.log (obj); // obj не определяется
4. Атрибуты, объявленные в прототипе, и атрибуты, которые поставляются с объектом, не могут быть удалены.
Атрибуты, объявленные в прототипе прототипа, и атрибуты, которые связаны с объектом (на самом деле, эти атрибуты также находятся в прототипе прототипа), которые имеют характеристики DontDelete и не могут быть удалены. Например
Кода -копия выглядит следующим образом:
// атрибуты, объявленные в прототипе, не могут быть удалены
функция obj () {
this.x = 1;
}
obj.prototype.x = 2;
var o = new obj ();
console.log (ox); // 1, OX определяется в конструкторе
Удалить OX;
console.log (ox); // 2, OX определяется в прототипе, даже если удаление OX снова выполняется, он не будет удален.
// атрибуты, которые поставляются с объектом, не могут быть удалены
var strings = "123456";
Console.log (Strings.length); // 6
Удалить строки. Length;
console.log (strings.length); // Это все еще 6
5. Несколько исключений в соответствии с утверждением ESP
В коде, выполненном Eval, хотя переменные, объявленные VAR, принадлежат глобальным объектам как нормальные объявленные VAR переменные, они не имеют атрибута DontDelete и могут быть удалены. Тем не менее, переменные, определенные VAR в функции в коде Eval, имеют нетронет и не могут быть удалены.
Кода кода выглядит следующим образом: eval ("var x = 42;");
x; // => 42
Удалить x;
x; // => referenceerror: x не определяется
eval ("function f () {return 12;}");
f (); // => 12
Удалить F;
f (); // => referenceerror: f не определяется
// в коде, выполненном Eval, хотя переменная, объявленная VAR, принадлежит глобальному объекту как нормальные объявленные переменные VAR,
// но они не имеют функции DontDelete и могут быть удалены.
eval ("(function () {" +
"var x = 42;" +
"Удалить x;" +
"вернуть x;" +
"}) ();")
// => 42
// переменная, определенная VAR в функции в коде Eval, не имеет возможности удалить.
6. возвращаемое значение удаления
DELETE - это нормальный оператор и вернет TRUE или FALSE. Верните ложь, когда существует свойство удаленного объекта, и имеет дондельте, в противном случае это правда. Одна функция здесь заключается в том, что когда атрибут объекта не существует, он возвращает истину, поэтому возвращаемое значение не совсем эквивалентно, является ли удаление успешным или нет.
Кода -копия выглядит следующим образом:
Функция c () {
this.x = 42;
}
C.prototype.y = 12;
var o = new c ();
Удалить OX; // истинный
бык; // неопределенный
"x" в O; // ЛОЖЬ
// быка существует и не имеет нерелита, возвращает истинность
Удалить Ой; // истинный
ой; // 12
// o сам не имеет атрибута OY, поэтому он возвращает истинность
// Отсюда вы также можете увидеть существование цепочки прототипа. Собственные атрибуты объекта и атрибуты прототипа разные.
Удалить O; // ЛОЖЬ
// global.o имеет функцию DontDelete, поэтому возвращает false
Удалить неопределенную пропертику; // истинный
// Global не имеет имущества с именем UndefinedProperty, поэтому возвращает True
Удалить 42; // истинный
// 42 не является свойством, поэтому возвращает истину. Некоторые реализации будут бросать исключения (нарушить стандарт Ecmascript)
var x = 24;
удалить x ++; // истинный
x; // 25
// что удалено возвращаемое значение x ++ (24), а не свойство, поэтому он возвращает истинность