原创作品,转载需得到原作者书面许可,同时保留原作者和出处,否则将追究法律责任。
从运算符名称可以猜想到,它可以删除一些东西。
下面通过代码实例介绍一下此运算符能删除何种东西,有什么限制。
一.基本介绍:
此运算符通常用于删除对象的属性,也可以在满足一定条件下删除变量。
下面分别通过代码实例做一下介绍。
(1).运算符可以删除对象的属性:
代码实例如下:
[JavaScript] 纯文本查看 复制代码运行代码let obj={ webName:"蚂蚁部落", url:"http://www.softwhy.com", address:"青岛市南区" } delete obj.address; console.log(obj.address);
代码运行效果截图如下:
可以看到address属性已经被删除。
(2).删除声明的变量:
并不是所有声明的变量都可以删除。
首先看一段代码实例:
[JavaScript] 纯文本查看 复制代码运行代码var webName="蚂蚁部落"; address="青岛市南区"; delete webName; delete address; console.log(webName); console.log(address);
代码运行效果截图如下:
有上述代码运行效果截图如下,可以得出如下结论:
(1).使用var声明的变量不能被删除。
(2).没有使用var声明的变量可以被删除。
再来看一段代码实例:
[JavaScript] 纯文本查看 复制代码运行代码eval("var webName='蚂蚁部落';"); delete antzone; console.log(antzone);
代码运行效果截图如下:
可以看到,使用eval()解析一段JavaScript代码,尽管使用了var,但是依然可以删除。
在eval上下问环境中,不使用var声明也可以被删除,这里就再演示。
[JavaScript] 纯文本查看 复制代码运行代码let arr=["蚂蚁部落",4,"青岛市南区"]; delete arr.length; console.log(arr.length);
代码运行效果截图如下:
length是内置属性,无法被删除,通常内置属性是无法被删除的。
二.能否被删除的原理:
在很多文章经常会说,之所以一个对象属性不能够被删除,是因为此属性具有DontDelete特性。
现在纠正一下,DontDelete特性是ES3的概念,现在已经被ES5中的Configurable特性值为false所替代。
代码实例如下:
[JavaScript] 纯文本查看 复制代码运行代码let antzone = { webName:"蚂蚁部落", url: "http://www.softwhy.com", age:4 }; Object.defineProperty(antzone,"webName",{ configurable:false }); delete antzone.webName; console.log(antzone.webName);
代码运行效果截图如下:
可以看到,将webName属性的configurable特性值设置为false。
这样delete运算符就无法删除此类属性。
关于configurable可以参阅configurable、enumerable和writable介绍一章节。
前端教程
HTML5 API
鲁ICP备10022556号-3
鲁公网安备 37021302000666号
关于我们
|手机版|小黑屋|
Copyright © 2012-2020 Design: 蚂蚁部落
最新评论