Свойство DontDelete объектов javascript
-
12-11-2019 - |
Вопрос
Согласно спецификации EcmaScript, некоторые свойства объектов не могут быть удалены из-за внутреннего параметра DontDelete.Например :
var y = 5
не должно быть удаляемым.Но из того, что мне удалось проверить - это так.
Вот ссылка в Центре разработчиков Mozilla:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete
Есть идеи, почему это не работает так, как должно?
Решение
Иногда нужно проверять то, что читаешь.Здесь нет DontDelete
внутренний параметр в спецификации ECMA (262, изд. 5).Может быть, [Configurable
] имеется в виду собственность?А delete
оператор не работает с переменными или функциями, он работает со свойствами объекта:
var y=5,
z = {y:5};
delete y;
delete z.y;
alert(y); //=> 5
alert(z.y); //=> undefined
Из моего ответа это ТАК вопрос появился, и отличный ответ от T.J.Краудер.
Другие советы
According to ES5 table 17:
CreateMutableBinding(N, D) Create a new mutable binding in an environment record. The String value N is the text of the bound name. If the optional Boolean argument D is true the binding is may be subsequently deleted.
and in 10.5 Declaration Binding Instantiation
- For each VariableDeclaration and VariableDeclarationNoIn d in code, in source text order do [...] ii. Call env’s SetMutableBinding concrete method passing dn, undefined, and strict as the arguments.
Which says to me that declared variables should be not deleteable. In global code, the global object is the activation object which is the variable obejct, so declared globals shouldn't be deletable. Of course, browsers may not adhere to that...
var y = 5
alert(delete (y));
Show false. Then, can't be deleted.