javascript中的delete如何使用?

javascript中的delete如何使用?
0 votes, 0.00 avg. rating (0% score)

什么时侯可以delete,什么时候不可以,主要有哪些应用场景?高手能不能详细解释下它的底层实现

感谢回答,扩展阅读:
perfectionkills.com/understa

回答:举个简单的例子:
var a={a:1,b:2};
delete a; //false, can’t be deleted.

delete a.a; //true, the property ‘a’ of object a can be deleted.


another example without var;
a = {a:1,b:2};
delete a.a; //true
delete a;// true


所以,可以总结下,可以删除的,在global scope下没有用var声明的变量,数组或对象,以及数组或对象中某一(没有特殊声明的)属性。
不可删除的,用var声明的变量,以及默认存在的property,例如window.document, Math.PI等等。


上面所指的特殊声明其实就是指LZ所讲的底层实现:
每个变量都是它所在的scope中的一个property, 在创建它时会默认的有几个附加属性,比较重要的是:value,writable,configurable,enumerable.他们的意思分别是变量的值,变量的值可覆盖,属性的名称可改(包括删除),可否用for in 枚举。其中后三项是布尔型。


继续举个例子,
在ECMAScript Edition 5中,我们可以用Object.create()来自己控制这些属性,例如,
var a = Object.create({},{a:{value:1, enumerable:false,configurable:false,writable:false}}) ;具体参数含义可以MDN上看下。



后面的就是自己定义的那些属性。我们可以测试到:
delete a.a; //false, because configurable is false
a.a =2; console.log(a.a); // 1, not 2, because writable is false
for(var i in a) console.log(i); //undefined, meaning nothing. because enumerable is false.


提示:类似Math.PI这种属性,writable是false的,不可更改,所以给它赋值没用作用。


除了上述四个属性外,还有两个,set,get,他们是方法,作用可想而知,去MDN或ECMAScript SPEC看一下就明了了。


希望对LZ有帮助啊。

本条目发布于 。属于 web前端开发 分类。作者是 admin 0 次浏览