本教程在这里指出
“如果您使用 delete 运算符删除属性,则 in 运算符会为该属性返回 false。”
以下是他们为此陈述的示例之一:
var trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
delete trees[3];
3 in trees; // returns false
但是,我的问题是,在删除树 [3] 之前,Object.getOwnPropertyNames(trees)
返回["0", "1", "2", "3", "4", "length"]
,但在删除它之后返回["0", "1", "2", "4", "length"]
。为什么会这样?我知道如果你删除一个属性,那么它就不会存在,但在这种情况下,属性也是数组的索引。这种奇怪的行为有什么好的解释吗?