作家
登录

Javascript学习笔记 delete运算符

作者: 来源:www.28hudong.com 2013-03-30 00:44:07 阅读 我要评论

一、语法 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赋值。

  推荐阅读

  TextArea不支持maxlength的解决办法(jquery)

用.net 控件久了,在给一个页面的TextBox 增加控制长度的控制时,简单的加了一个maxlength='xxx' 就行,可是测试确总是不过,原因是设置了多行模式,在这样的情况下生成的html代码就是textarea,同时maxlength属性就>>>详细阅读


本文标题:Javascript学习笔记 delete运算符

地址:http://www.17bianji.com/kaifa2/JS/24166.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)