Свойство DontDelete объектов JavaScript - PullRequest
5 голосов
/ 13 мая 2011

Согласно спецификации EcmaScript некоторые свойства объектов не могут быть удалены из-за внутреннего параметра DontDelete. Например:

var y = 5

не должно быть удаляемым. Но из того, что я смог проверить - это так.

Вот ссылка в Центре разработчиков Mozilla: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete

Есть идеи, почему это не работает как надо?

Ответы [ 3 ]

1 голос
/ 13 мая 2011

Иногда вам нужно проверить, что вы читаете. В спецификации ECMA отсутствует внутренний параметр DontDelete (262, изд. 5). Может быть, свойство [Configurable] имеется в виду? Оператор delete не работает с переменными или функциями, он работает со свойствами объекта:

var y=5, 
    z = {y:5};
delete y;
delete z.y;
alert(y);   //=> 5
alert(z.y); //=> undefined

Из моего ответа возник этот ТАКИЙ вопрос и отличный ответ от Т.Дж. Crowder.

1 голос
/ 13 мая 2011

Согласно ES5, таблица 17:

CreateMutableBinding (N, D) Создайте новую изменяемую привязку в запись среды. Строковое значение N текст связанного имени. Если необязательный логический аргумент D является истинным привязка может быть впоследствии Исключен.

и в 10.5 Декларации обязательного подтверждения

  1. Для каждого VariableDeclaration и VariableDeclarationNoIn d в коде, в порядок исходного текста сделать [...] II. Вызовите env's SetMutableBinding конкретный метод передачи дн, не определено, и строг в качестве аргументов.

Что говорит мне о том, что объявленные переменные нельзя удалять. В глобальном коде глобальный объект - это объект активации, который является переменной obejct, поэтому объявленные глобальные переменные не должны быть удаляемыми. Конечно, браузеры могут этого не придерживаться ...

0 голосов
/ 13 мая 2011
var y = 5
alert(delete (y));

Показать false . Тогда не может быть удалено.

...