为什么删除运算符返回true,即使未从对象中删除属性也是如此

时间:2013-09-07 17:39:03

标签: javascript object

>>> var par = {a: 1, b: 2};
undefined
>>> var ch = Object.create(par);
undefined
>>> delete ch.a
true
>>> ch
Object { a=1, b=2}

1 个答案:

答案 0 :(得分:3)

你误解了删除的内容:

  

如果属性是自己的不可配置属性,则以严格模式抛出(在非严格中返回false)。在所有其他情况下返回true。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

delete ch.a尝试在a中找到属性ch,失败(因为ch没有拥有的属性),是什么都没有,并愉快地回归true。如果您写了delete ch.foobar,结果将是相同的。但是,如果您尝试了不可配置的属性(例如delete ch.__proto__),则结果为false