Javascript学习笔记 delete运算符


Posted in Javascript onSeptember 13, 2011

一、语法

delete后面的表达式必须给出一个属性的引用,比如
var o = {a:1};
delete o.a; //此处o.a是对象o的属性a的引用

只有在with语句里才能使用单独的属性名

with(o){ 
delete a; 
}

二、delete的返回值

delete是普通运算符,会返回true或false。规则为:当被delete的对象的属性存在并且不能被删除时 返回false,否则返回true。 这里的一个特点就是,对象属性不存在时也返回true,所以返回值并非完全等同于删除成功与否。

var o = {a:1}; 
delete o.a; //返回true 
var b = 2; 
delete b;//返回false,ECMA规则约定:使用var和function声明的变量不可以被delete

三、哪些情况下不允许delete

上例提到的var和function声明的变量不可以被delete,但隐式声明可以被删除
function c(){return 12;} 
delete c;//返回false 
d = function(){return 12;} 
delete d;//返回true

不能delete从原型链上继承的属性,但可以删除原型链上的属性
function Foo(){} 
Foo.prototype.bar = 42; 
var foo = new Foo(); 
delete foo.bar; // 返回true,但并没有起作用 
alert(foo.bar); // alerts 42, 属性是继承的 
delete Foo.prototype.bar; // 在原型上删除属性bar 
alert(foo.bar); // alerts "undefined", 属性已经不存在,无法被继承

四、特例
eval执行的代码中如有通过var和function声明的变量,可以被delete 
eval("var a=1"); 
delete a; 
alert(a); //报未定义错误

如果声明是在eval执行代码中的闭包内进行的,则变量不能被delete
eval("(function(){var a=1;delete a; return a;})()");//1
五、delete 数组元素 从数组中delete其元素并不会影响数组的长度
var arr = ['yuyin','suhuan','baby']; 
delete arr[0]; 
alert(arr.length);//alert 3

被delete的键值已经不属于数组,但却还是可以被访问,其值为undefined。
var arr = ['yuyin','suhuan','baby']; 
delete arr[0]; 
0 in arr; // false 
alert(arr[0]);//undefined 
arr[0] === undefined;//true

对比直接将键值赋值undefined
var arr = ['yuyin','suhuan','baby']; 
arr[0] = undefined; 
0 in arr; // true 
alert(arr[0]);//undefined 
arr[0] === undefined;//true

可以看出delete 操作只是将键值这个属性从数组中删除了,数组本身也是对象,这个情况好理解的。如果需要保留键值,可以用undefined赋值。
Javascript 相关文章推荐
js 操作select和option常用代码整理
Dec 13 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
js关于命名空间的函数实例
Feb 05 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
纯JS实现轮播图
Feb 22 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
vue2 全局变量的设置方法
Mar 09 Javascript
Vue2.0生命周期的理解
Aug 20 Javascript
js实现小时钟效果
Mar 25 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 Javascript
Webkit的跨域安全问题说明
Sep 13 #Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 #Javascript
容易被忽略的JS脚本特性
Sep 13 #Javascript
Javascript学习笔记-详解in运算符
Sep 13 #Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 #Javascript
ie下动态加态js文件的方法
Sep 13 #Javascript
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 #Javascript
You might like
PHP字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
家长会学生家长演讲稿
2013/12/29 职场文书
思想政治表现评语
2015/01/04 职场文书
财务会计岗位职责
2015/02/03 职场文书
追讨欠款律师函
2015/06/24 职场文书
Python中22个万用公式的小结
2021/07/21 Python
搭建Yolov5服务器
2022/04/30 Servers
SQL SERVER中的流程控制语句
2022/05/25 SQL Server