Сегодня, просматривая код прототипа, я обнаружил оператор удаления.
не установлено: функция (ключ) {
значение var = this._object[ключ];
удалить этот._объект[ключ];
возвращаемое значение;
}
Я проверил руководство,
Оператор удаления удаляет свойство объекта или элемент массива.
удалить выражение
Параметр выражения — это допустимое выражение JScript, обычно это имя свойства или элемент массива.
Описание Если результатом выражения является объект и атрибут, указанный в выражении, существует, и объект не позволяет его удалить, возвращается false.
Во всех остальных случаях возвращает true.
Приятно видеть «удаление элемента из массива», но после попытки сделать это в ff кажется, что он может удалить только значение этого элемента, а не сам элемент. Однако можно удалить свойство объекта.
Я снова погуглил и нашел статью, в которой очень подробно описано, поэтому опубликую ее здесь, чтобы не забыть:
Название: Переменные Javascript и оператор удаления. Заявление об авторских правах. Вы можете перепечатывать по своему усмотрению, но при этом необходимо указать оригинального автора Чарли и исходную ссылку http://tech.idv2.com/2008/01/09/javascript-variables-and- удалить при перепечатке -operator/ и этого оператора.
содержание:
Я только что прочитал хорошую статью (исходная ссылка), в которой подробно анализируется оператор удаления в Javascript. Вот краткое введение в содержание.
Хотя это небольшой оператор удаления, его поведение чрезвычайно сложно.
Переменные Javascript
Объект удаляется оператором удаления. Когда удаление выполняется для переменной, атрибуты, которые можно удалить, и атрибуты, которые нельзя удалить, переменные, которые можно удалить, и переменные, которые нельзя удалить.
Возвращаемое значение удаления
---------------------------------------------- --- ----------------------------------
Переменные Javascript Фактически, в Javascript переменные = свойства объекта, это связано с тем, что Javascript создаст глобальный объект перед выполнением сценария. Все глобальные переменные являются свойствами этого глобального объекта. При выполнении функции также будет создан объект активации. Например:
var global = 42;this.global; // 42, вы можете получить доступ к объекту Global через this.global2 = 12;global2; // 12function foo() { var local = 36; // Однако активация невозможна. доступ напрямую , // Следовательно, доступ к локальной переменной через foo.local невозможен} Объект, удаленный оператором удаления
В C++ также есть оператор удаления, который удаляет объект, на который указывает указатель. Например:
// C++class Object {public: Object *x;}Object o;ox = new Object();delete ox // Новый объект Object в предыдущей строке будет освобожден, но удаление в Javascript отличается; из C++. Объект, на который указывает ox, не удаляется, но удаляется сам атрибут ox.
// Javascriptvar o = {};ox = new Object();delete ox; // Объект Object, новый в предыдущей строке, все еще существует ox; // не определено, свойство x из o удалено. После удаления ox объект Object будет очищен от мусора, поскольку он потерял свою ссылку. Таким образом, удаление ox «эквивалентно» удалению объекта, на который указывает ox. Однако это действие не является стандартом ECMAScript. даже если реализация полностью отсутствует. Неудаление объекта Object не нарушает стандарт ECMAScript.
«Удаление атрибутов вместо удаления объектов» можно подтвердить следующим кодом.
var o = {};var a = { x: 10 };oa = a;delete oa; // Атрибут oa удален oa; // undefinea.x // 10, поскольку объект { x: 10 } по-прежнему является ссылкой, поэтому она не будет переработана. Кроме того, delete ox также может быть записан как delete o["x"], оба из которых имеют одинаковый эффект.
При удалении переменной переменная также является свойством объекта Global или Activation, поэтому операция удаления переменной имеет тот же результат.
var global = 42; delete global; // Удалить Global.globalfunction foo() { var local = 36; // Удалить Activation.local} Свойства, которые можно удалить, и свойства, которые нельзя удалить. удалить. Например, свойства, объявленные в прототипе, не могут быть удалены:
function C() { this.x = 42 } C.prototype.x = 12;var o = new C();ox // 42, определенное в конструкторе o; .xdelete ox;ox; // 12, ox, определенный в прототипе, не будет удален, даже если delete ox будет выполнен снова. Предопределенные свойства объекта не могут быть удалены. Можно считать, что этот тип атрибута имеет характеристики DontDelete.
var re = /abc/i;delete re.ignoreCase;re.ignoreCase; // true, ignoreCase не может удалять переменные, которые можно удалить, и переменные, которые не могут быть удалены. Переменные, объявленные через var, и функции, объявленные через function, имеют атрибут DontDelete и удалить нельзя.
var x = 36;delete x;x; // 36, x не удаляется y = 12;delete y;y; // undefinedfunction foo() { return 42; }delete foo;foo(); Единственным исключением является то, что в коде, выполняемом с помощью eval, хотя переменные, объявленные с помощью var, принадлежат тому же глобальному объекту, что и обычные переменные, объявленные с помощью var, они не имеют атрибута DontDelete и могут быть удалены.
eval("var x = 36;");x; // 42delete x;x; // undefined Но есть исключение. Переменные, определенные var в функции в коде eval, имеют DontDelete и не могут быть удалены eval(" ( function() { var x = 42; delete x; return x;)();"); // Возвращаем возвращаемое значение 42delete
Удалить — обычный оператор, возвращающий true или false. Правило такое: если свойство удаленного объекта существует и имеет DontDelete, оно возвращает false, в противном случае оно возвращает true. Одной из особенностей здесь является то, что true возвращается, даже если атрибут объекта не существует, поэтому возвращаемое значение не полностью эквивалентно успешному удалению или нет.
функция C() { this.x = 42; } C.prototype.y = 12;var o = new C();delete ox; // trueo.x; // undefined "x" in o; / ox существует и DontDelete нет, return truedelete oy; // trueo.y; // 12// o сам по себе не имеет атрибута oy, поэтому верните true// Отсюда вы также можете увидеть существование цепочки прототипов, собственные атрибуты объекта и атрибуты прототипа отличаются delete o; // false// Global.o имеет атрибут DontDelete, поэтому он возвращает falsedelete undefineProperty // true// Global не имеет свойства с именем undefineProperty, поэтому он возвращает truedelete 42; /42 не является свойством, поэтому возвращает true. Некоторые реализации выдают исключение (нарушающее стандарт ECMAScript) var x = 24; delete x++ // 25// Удаляется возвращаемое значение (24) x++, а не атрибут, поэтому возвращается true;