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提交并解析后台返回的XML的代码
Nov 03 Javascript
jquery 最简单易用的表单验证插件
Feb 27 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
利用javascript数组长度循环数组内所有元素
Dec 27 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
jquery+css实现的红色线条横向二级菜单效果
Aug 22 Javascript
学习JavaScript设计模式(封装)
Nov 26 Javascript
js中字符型和数值型数字的互相转化方法(必看)
Apr 25 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
vue 集成jTopo 处理方法
Aug 07 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
小程序实现分类页
2019/07/12 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python中创建二维数组
2018/10/17 Python
Python list与NumPy array 区分详解
2019/11/06 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
关于环保的建议书400字
2014/03/12 职场文书
禁毒宣传标语
2014/06/19 职场文书
悬空寺导游词
2015/02/05 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python