【发布时间】:2016-02-09 02:39:31
【问题描述】:
目前,我正在编写关于 JavaScript 编码的复杂实验室作品。我知道有这样的结构
if ('field' in object) {
/* Do something with object.field */
}
用于确定field 中是否确实存在名为field 的变量,即使它等于未定义。
而我的 Firefox Developer Edition 44 能够确定数组中是否有这样的字段:
if (0 in array) {
/* Do something with first element */
}
问题:这种方法合法吗?它是生活水平的一部分吗?
应该做什么:
让 q 是一个包含这些元素的数组:
[ 5, <1 empty slot>, undefined, 5 ]
然后:
-
0 in q、2 in q、3 in q等于true; -
1 in q等于false。
【问题讨论】:
-
“
<1 empty slot>”是什么意思? -
@hindmost:JavaScript 数组本质上是稀疏的。它们可以有空元素。
-
@T.J.克劳德 是的,我知道。但是 AFAIK 这样的空元素与
undefined相同。所以 OP 的数组样本似乎模棱两可。 -
@hindmost:根本不存在的属性与值为
undefined的属性之间存在显着差异。如果你这样做obj.prop,那么在这两种情况下,result 都是undefined,但发生这种情况的机制完全不同。 Missing-vs-present-with-undefined 还对for-in循环、forEach、Object.keys、... 产生影响
标签: javascript syntax cross-browser