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的IE和Firefox兼容性集锦
Dec 11 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
Oct 28 Javascript
Jquery拖拽并简单保存的实现代码
Nov 28 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
JS文字球状放大效果代码分享
Aug 19 Javascript
jQuery+ajax实现实用的点赞插件代码
Jul 06 Javascript
在vscode中统一vue编码风格的方法
Feb 22 Javascript
vue 取出v-for循环中的index值实例
Nov 09 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
微信小程序如何实现点击图片放大功能
Jan 21 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捕获Fatal error错误的方法
2014/06/11 PHP
php自定义错误处理用法实例
2015/03/20 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
生产内勤岗位职责
2013/12/07 职场文书
网页美工求职信
2014/02/15 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
党组织结对共建协议书
2016/03/23 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
Python函数中的不定长参数相关知识总结
2021/06/24 Python