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 相关文章推荐
JavaScript 读取元素的CSS信息的代码
Feb 07 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
webpack配置文件和常用配置项介绍
Apr 28 Javascript
select获取下拉框的值 下拉框默认选中方法
Feb 28 Javascript
jquery实现的简单轮播图功能【适合新手】
Aug 17 jQuery
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
vue实现商城秒杀倒计时功能
Dec 12 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
Aug 06 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中并发读写文件冲突的解决方案
2013/10/25 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
python创建进程fork用法
2015/06/04 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python中正则表达式的使用方法
2018/02/25 Python
Python生成器generator用法示例
2018/08/10 Python
python判断输入日期为第几天的实例
2018/11/13 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
PyTorch预训练的实现
2019/09/18 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
技校生自我鉴定
2013/12/08 职场文书
入学生会自荐书范文
2014/02/05 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python