在javascript中,可以使用delete运算符来删除对象的属性,它的操作数应当是一个属性访问表达式;例“var obj={x:1};delete obj.x;”。delete运算符只能删除自由属性,不能删除继承属性。

本教程操作环境:windows7系统、javascript1.8.5版、DelV . 3 n ! ^ /l G3电脑。

delete运算符可以删除对象的属性。它的操作数应当是一个属性访问表达式。让人感到意外的是,delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性:

delete bov W B . J Iok.author;6 } r //book不再有属性autho/ ? D & V 4 Vr
delete book["main title"] //book不会再有属性"main title"

delete运算符只能删除自由属性,不能删除继承属性(要删除继承属性必须从d G A ` &定义这个属性的原型对象上删除它,而且这会影响到所有继承自这个原型的对象)。
注:

a={p:{x:1}};
b=a.p;
delete a.p;

执行这段代码后b.x的值仍为1。由于已经删除的属性的引用依然存在,因此在JavaScript的某些实现中,可能因为这种不严谨的代码而造成] + H p k 8内存泄漏。所以在销毁对象的时候,要遍历属性中的属性,依次删除。

当delete表达式删除成功或没有任何副作用(比如删除不存在的属性时),它返回true。如果delete后不是一个属性访问表达式,delete同样返回true。

o = {x/ c ) N k b v:1};
delete o.x; //删除x,返m x m ( y G 2 G I回true。
delete o.x/ Z 2 H , 2 3; //什么都没做(x已经不存在了),返回true
delete o.toString; //什么也没做(toString是继承来的),返回true
delete 1; //无意义,返回trueH # o U l l k & P

dele( s x s L u ete不能删除那些可配置性为fal\ / o cse的属性(尽管可以删除不可扩展对象的可配置属性)。某些内置对象的属性是( ] T 5 2不可配置的,比如通过变量声明和函数声明创建的全局对象的属性。在严格模式中,删除一个不可配置属性会报一个类型错误。在非严格模式下中,在这些情况下的delete操作符 会返回false:

delete Object.prototype; //不能删除,属性是不可配置= F ) * z 4 B 5的
var x = 1;
deleY K ` y , -te this.x; //不能删除这个全局变量,
f# + S } v munction f(){}
delete this.f; //同样也不能删除全局函数

当在非严格模式中删除全局对象的可配置和属性时,可以省略对全局对象的引用,直接在delete操作符后跟* f 4 v 1随要删除的属性名即可:

this.x = 1; //创建一个可配置的全局属性(没有用var)
delete x; //将它删除

然而在严格模式中,delete后跟随一个非法的操作数(比如x),则会报一个语法错误,因此必须显示指定对象及其属性:

delete x; //在严格模式下报语法错误
delete this.x; //正常工作

【推荐学习:jav/ ? W { 3 & V 6ascript高– Y f 8 v M / W U级教程】

以上就是javascript怎么删除对象的属性的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注