Javascript 为什么即使属性不是';不能从对象中删除
您误解了delete返回的内容: 如果属性是自己的不可配置属性,则在严格模式下抛出(在非严格模式下返回false)。在所有其他情况下返回true。()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 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}