为什么3 [4,2]在JS中评估为未定义?

时间:2017-08-01 13:01:39

标签: javascript arrays

对于某种,可以说是不合逻辑或嘲弄的程度,我可以了解JS的结果,如:

// Coercing to string and concatenating
3 + [4,2]
'34,2'

// Coercing and doing proper math
4 - [2]
2

// Or failing miserably
3 - [4,2]
NaN

但为什么3[4,2]评估为undefined?至少在上面的例子中,有操作要执行(正在做某事)。在相关的说明中,具有讽刺意味的是[4,2]3引发SyntaxError: Unexpected number错误。

这里发生了什么?

上下文 :花了一个早上发现并挤压一个错误,其中,(逗号)从数组混合中丢失和嵌套数组:[1, 2, 3 [4, 2], 5, [8], 7]

1 个答案:

答案 0 :(得分:8)

表达式

3[4,2]

评估为

(new Number(3))[4, 2]

属性查找操作。 4,2表达式是逗号运算符的示例,其值是子表达式列表中的最后一个2

运行时创建的Number实例没有名为“2”的属性,因此结果为undefined

该语言对.[]运算符的处理几乎相同,但.与数字文字的令牌语法纠缠在一起。左侧将转换为对象(如果可能;当它为undefined时,您将获得熟悉的“无法读取未定义的属性foo”错误)。然后获取属性值(如果存在)。

例如

3["valueOf"]

不是undefined:它是Number.prototype.valueOf函数的引用。

相关问题