JavaScript知识点之:delete操作符

delete 操作符来删除一个隐式声明的全局变量,也就是没有使用 var 定义的全局变量.

如果 delete 操作符删除成功, 则被delete的属性已从所属的对象上彻底消失, 随后,该对象的原型上可能存在的一个同名属性会被继承.

一些对象的属性不能被delete.  ECMA 262 规范中把这些属性标记为 DontDelete.

x = 42;        // 隐式声明的全局变量
var y = 43;    // 显式声明的全局变量
myobj = new Number();
myobj.h = 4;    // 添加属性h
myobj.k = 5;    // 添加属性k

delete x;       // 返回 true (隐式声明的全局变量可以被删除)
delete y;       // 返回 false (显式声明的全局变量不能被删除,该属性有DontDelete标记)
delete Math.PI; // 返回 false (内置对象的内置属性不能被删除, 该属性有DontDelete标记)
delete myobj.h; // 返回 true (用户定义的属性可以被删除)
with(myobj) { 
  delete k;    // 返回 true (相当于delete myobj.k)
} 
delete myobj;   // 返回 true (隐式声明的全局变量可以被删除)

你不能删除一个对象从原型继承而来的属性(不过你可以从原型上直接删掉它).

 

function Foo(){}
 Foo.prototype.bar = 42;
 var foo = new Foo();
 delete foo.bar;           // 无效的操作
 alert(foo.bar);           // alerts 42, 继承的属性
 delete Foo.prototype.bar; // 直接删除原型上的属性
 alert(foo.bar);           // alerts "undefined",已经没有继承的属性

当你删除一个数组元素时,数组的length属性并不会变小. 当用delete 操作符删除一个数组元素时,被删除的元素已经完全不属于该数组.

var trees = ["redwood","bay","cedar","oak","maple"];
delete trees[3];
if (3 in trees) {
   // 不会执行到这里
}


如果你想让一个数组元素的值变为undefined而不是删除它,可以使用 undefined给其 赋值而不是使用delete操作符. 

var trees = ["redwood","bay","cedar","oak","maple"];
trees[3]=undefined;
if (3 in trees) {
   // 会执行到这里
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值