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 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
js网页版计算器的简单实现
Jul 02 Javascript
JavaScript 学习笔记之数据类型
Jan 14 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
js 只比较时间大小的实例
Oct 26 Javascript
Vue项目中最新用到的一些实用小技巧
Nov 06 Javascript
vue cli使用融云实现聊天功能的实例代码
Apr 19 Javascript
3分钟了解vue数据劫持的原理实现
May 01 Javascript
React学习之JSX与react事件实例分析
Jan 06 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
用js编写留言板
Mar 17 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
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
跟老齐学Python之print详解
2014/09/28 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
详解django.contirb.auth-认证
2018/07/16 Python
python执行精确的小数计算方法
2019/01/21 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
Django中的cookie和session
2019/08/27 Python
浅析python内置模块collections
2019/11/15 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
留学推荐信怎么写
2014/01/25 职场文书
公司委托书格式范文
2014/10/09 职场文书
2014年基建工作总结
2014/12/12 职场文书
公积金接收函格式
2015/01/30 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
美元符号 $
2022/02/17 杂记