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函数库)S.Sams Lifexperience ScriptClassLib
Apr 29 Javascript
将函数的实际参数转换成数组的方法
Jan 25 Javascript
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
原生js写的放大镜效果
Aug 22 Javascript
JS JQUERY实现滚动条自动滚到底的方法
Jan 09 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
Jun 17 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
Apr 29 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 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
11个PHP 分页脚本推荐
2011/08/15 PHP
php 文本文件的读取效率
2012/02/10 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
新闻内页-JS分页
2006/06/07 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
Python读写Excel文件的实例
2013/11/01 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
医院护理人员的自我评价分享
2013/10/04 职场文书
信息部岗位职责
2013/11/12 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
详解Vue的列表渲染
2021/11/20 Vue.js
React自定义hook的方法
2022/06/25 Javascript