在javascript中,可以使用delete运算符来删除对象的属性,它的操作数应当是一个属性访问表达式;例“var obj={x:1};delete obj.x;”。delete运算符只能删除自由属性,不能删除继承属性。
本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。
delete运算符可以删除对象的属性。它的操作数应当是一个属性访问表达式。让人感到意外的是,delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性:
delete book.author; //book不再有属性author delete book["main title"] //book不会再有属性"main title"
delete运算符只能删除自由属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,而且这会影响到所有继承自这个原型的对象)。
注:
a={p:{x:1}}; b=a.p; delete a.p;
执行这段代码后b.x的值仍为1。由于已经删除的属性的引用依然存在,因此在JavaScript的某些实现中,可能因为这种不严谨的代码而造成内存泄漏。所以在销毁对象的时候,要遍历属性中的属性,依次删除。
当delete表达式删除成功或没有任何副作用(比如删除不存在的属性时),它返回true。如果delete后不是一个属性访问表达式,delete同样返回true。
o = {x:1}; delete o.x; //删除x,返回true。 delete o.x; //什么都没做(x已经不存在了),返回true delete o.toString; //什么也没做(toString是继承来的),返回true delete 1; //无意义,返回true
delete不能删除那些可配置性为false的属性(尽管可以删除不可扩展对象的可配置属性)。某些内置对象的属性是不可配置的,比如通过变量声明和函数声明创建的全局对象的属性。在严格模式中,删除一个不可配置属性会报一个类型错误。在非严格模式下中,在这些情况下的delete操作符 会返回false:
delete Object.prototype; //不能删除,属性是不可配置的 var x = 1; delete this.x; //不能删除这个全局变量, function f(){} delete this.f; //同样也不能删除全局函数
当在非严格模式中删除全局对象的可配置和属性时,可以省略对全局对象的引用,直接在delete操作符后跟随要删除的属性名即可:
this.x = 1; //创建一个可配置的全局属性(没有用var) delete x; //将它删除
然而在严格模式中,delete后跟随一个非法的操作数(比如x),则会报一个语法错误,因此必须显示指定对象及其属性:
delete x; //在严格模式下报语法错误 delete this.x; //正常工作
【推荐学习:javascript高级教程】
以上是javascript怎么删除对象的属性的详细内容。更多信息请关注PHP中文网其他相关文章!