javascript怎么删除对象的属性


本文摘自PHP中文网,作者青灯夜游,侵删。

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

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

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

1

2

delete book.author; //book不再有属性author

delete book["main title"] //book不会再有属性"main title"

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

1

2

3

a={p:{x:1}};

b=a.p;

delete a.p;

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

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

1

2

3

4

5

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:

1

2

3

4

5

delete Object.prototype; //不能删除,属性是不可配置的

var x = 1;

delete this.x; //不能删除这个全局变量,

function f(){}

delete this.f; //同样也不能删除全局函数

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

1

2

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

delete x; //将它删除

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

1

2

delete x; //在严格模式下报语法错误

delete this.x; //正常工作

【推荐学习:javascript高级教程

以上就是javascript怎么删除对象的属性的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

详解js中map和foreach的差异

javascript怎么修改css

h5实现放大镜效果的代码

javascript中的arguments对象的用法介绍

html5结合javascript实现简易音乐播放器

javascript和java一样吗

js中for…in和for…of之间有什么区别

javascript可不可以跨平台

es6块级绑定中let and const的详细分析

javascript是一种运行在什么语言

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...