Определение свойств, которые нельзя удалить? - PullRequest
2 голосов
/ 02 апреля 2012

Если я сделаю это в JSDB 1.8, которая использует Spidermonkey 1.8:

 this.x = 3;
 var y = 4;
 function z() { return 77; }
 this.w = function w() { return 44; }
 this.v = function v() { return 55; }
 w = function w() { return 66; }
 function v() { return 77; }
 delete x;
 delete y;
 delete z;
 delete w;
 delete v;

Я получаю true от линий delete x и delete w, но false от линий delete y и delete z и delete v.

Что здесь происходит, и определено ли это поведение в стандарте ECMAscript или в Spidermonkey? Я хотел удалить функцию из определенной области и обнаружил, что не могу.

Ответы [ 3 ]

1 голос
/ 02 апреля 2012

прочитать подробное описание полностью можно здесь http://perfectionkills.com/understanding-delete/

1 голос
/ 02 апреля 2012

Другая хорошая ссылка на описание этого поведения взята из MDN https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete

, в котором говорится, что переменные, определенные с помощью ключевого слова var в глобальном пространстве имен, не могут быть удалены.

, но если вы используетеjavascript 1.8.5, затем вы можете использовать метод defineProperty объекта Object для создания свойств, которые могут быть удалены с помощью настраиваемой опции «true»

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

0 голосов
/ 02 апреля 2012

Как объясняет ссылка, опубликованная Хельмусом, в широком смысле (в этой области, как обсуждается в статье, есть некоторые кросс-браузерные причуды), переменные не могут быть удалены, но свойства могут.

Обратите внимание, что в глобальномобласть видимости, переменные, объявленные без ключевого слова var, считаются свойствами глобального объекта.Итак:

var global_var1 = 'some val';
global_var2 = 'some val';
delete global_var1; //false
delete global_var2; //true
typeof global_var1; //'string'
typeof global_var2; //'undefined'
...