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 相关文章推荐
jquery json 实例代码
Dec 02 Javascript
jQuery 取值、赋值的基本方法整理
Mar 31 Javascript
JavaScript检测上传文件大小的方法
Jul 22 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
Layui table field初始化加载时进行隐藏的方法
Sep 19 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
微信小程序学习总结(五)常见问题实例小结
Jun 04 Javascript
基于Vue中的父子传值问题解决
Jul 27 Javascript
js+audio实现音乐播放器
Sep 13 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连接access数据库
2008/03/27 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
原生JavaScript实现进度条
2021/02/19 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Django实现内容缓存实例方法
2020/06/30 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
日语专业推荐信
2013/11/12 职场文书
庆国庆活动总结
2014/08/28 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
长江三峡导游词
2015/01/31 职场文书
家属慰问信
2015/02/14 职场文书
督导岗位职责范本
2015/04/10 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
日元符号 ¥
2022/02/17 杂记
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers