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 相关文章推荐
一个cssQuery对象 javascript脚本实现代码
Jul 21 Javascript
修复ie8&chrome下window的resize事件多次执行
Oct 20 Javascript
js 控制图片大小核心讲解
Oct 09 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
Jun 07 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
angular中的cookie读写方法
Aug 02 Javascript
详解jQuery如何实现模糊搜索
May 10 jQuery
Node.js创建一个Express服务的方法详解
Jan 06 Javascript
three.js 制作动态二维码的示例代码
Jul 31 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学习笔记之三 数据库基本操作
2011/01/17 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
python文件和目录操作函数小结
2014/07/11 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
python爬取网页转换为PDF文件
2018/06/07 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
python绘制动态曲线教程
2020/02/24 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
python自动生成证件号的方法示例
2021/01/14 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
简单英文演讲稿
2014/01/01 职场文书
四年级科学教学反思
2014/02/10 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
党员三严三实心得体会
2014/10/13 职场文书
实习协议书
2015/01/27 职场文书
初中数学教学随笔
2015/08/15 职场文书
教师反邪教心得体会
2016/01/15 职场文书
Django框架中视图的用法
2022/06/10 Python