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 相关文章推荐
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
Nov 06 Javascript
js自动下载文件到本地的实现代码
Apr 28 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
May 05 Javascript
JS控制输入框内字符串长度
May 21 Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 Javascript
javascript实现类似百度分享功能的方法
Jul 27 Javascript
js倒计时简单实现代码
Aug 11 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
Dec 20 Javascript
vue中render函数的使用详解
Oct 12 Javascript
JS加载解析Markdown文档过程详解
May 19 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
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
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
JS打印组合功能
2016/08/04 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
八大排序算法的Python实现
2021/01/28 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
优秀小学生家长评语
2014/01/30 职场文书
公益广告宣传方案
2014/02/28 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
安全月活动总结
2014/05/05 职场文书
娱乐节目策划方案
2014/06/10 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
工程部岗位职责范本
2015/04/11 职场文书
理想国读书笔记
2015/06/25 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书