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 相关文章推荐
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
May 05 Javascript
Javascript实现前端简单的路由实例
Sep 11 Javascript
BootStrap实现鼠标悬停下拉列表功能
Feb 17 Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
Sep 12 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
Nov 01 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
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
基于文本的搜索
2006/10/09 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP错误机制知识汇总
2016/03/24 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
JS实现放烟花效果
2020/03/10 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
python 读写中文json的实例详解
2017/10/29 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
信号生成及DFT的python实现方式
2020/02/25 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
工程管理专业个人求职信范文
2013/12/07 职场文书
幼儿园老师辞职信
2014/01/20 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
学生生病请假条范文
2014/02/16 职场文书
2014政务公开实施方案
2014/02/19 职场文书
会员卡清退活动总结
2014/08/27 职场文书
爱牙日活动总结
2014/08/29 职场文书
快递员岗位职责
2014/09/12 职场文书
员工2014年度工作总结
2014/12/09 职场文书
小学班主任研修日志
2015/11/13 职场文书
Python 数据可视化之Matplotlib详解
2021/11/02 Python