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

Why delete operator returns true even if property wasn't deleted from an object

本文关键字:删除 属性 对象 运算符 返回 true 为什么      更新时间:2023-09-26
>>> var par = {a: 1, b: 2};
undefined
>>> var ch = Object.create(par);
undefined
>>> delete ch.a
true
>>> ch
Object { a=1, b=2}

你误解了删除返回的内容:

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

delete ch.a尝试在ch中找到a的属性,失败(因为ch没有这样的自己的属性),什么也不做,很高兴地返回true。如果你写delete ch.foobar,结果将是相同的。但是,如果您尝试了不可配置的属性(例如 delete ch.__proto__ ),结果将是 false