Вопрос

Согласно спецификации 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

  1. 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top