Javascript 为什么即使属性不是';不能从对象中删除

Javascript 为什么即使属性不是';不能从对象中删除,javascript,object,Javascript,Object,您误解了delete返回的内容: 如果属性是自己的不可配置属性,则在严格模式下抛出(在非严格模式下返回false)。在所有其他情况下返回true。() delete ch.a尝试在ch中定位属性a,失败(因为ch没有自己的属性),不执行任何操作,并愉快地返回true。如果您编写了delete ch.foobar,结果将是相同的。但是,如果您尝试了一个不可配置的属性(例如,delete ch.\uu proto\uu),结果将是false尝试删除par.a,它返回true并实际删除该属性,但它也删

您误解了delete返回的内容:

如果属性是自己的不可配置属性,则在严格模式下抛出(在非严格模式下返回false)。在所有其他情况下返回true。()


delete ch.a
尝试在
ch
中定位属性
a
,失败(因为
ch
没有自己的属性),不执行任何操作,并愉快地返回
true
。如果您编写了
delete ch.foobar
,结果将是相同的。但是,如果您尝试了一个不可配置的属性(例如,
delete ch.\uu proto\uu
),结果将是
false

尝试删除
par.a
,它返回true并实际删除该属性,但它也删除
ch.a
。为什么?因为使用
Object.create
只需创建对象的引用,而不是新副本。这是一篇关于
delete
的非常好的文章:--您可以阅读
对象的行为。从中创建
,我认为这可以帮助您我认为ch具有属性ch.a(1),在这种情况下,它是固有的,我知道它。但我只是希望,如果我不知道属性是否被继承,如果它没有被删除,那么它会变为false。@ruan65:
delete
仅在不允许删除属性的情况下返回
false
,和
true
在所有其他情况下-无论属性是否被实际删除。这听起来像是一种感觉。这是糟糕的实现/规范-如果不允许删除属性,它应该抛出,如果属性不存在,则返回false,如果属性存在,则返回true。更准确地说,在严格模式下,如果不可配置,它应该抛出,如果不可配置,o/w返回false。
>>> var par = {a: 1, b: 2};
undefined
>>> var ch = Object.create(par);
undefined
>>> delete ch.a
true
>>> ch
Object { a=1, b=2}