2017-08-01 65 views
3

一定量时,可以说是不合逻辑或嘲笑,某种程度上我可以让我的周围JS结果像头:为什么3 [4,2]在JS中评估为undefined?

// 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]

+2

理解。正如在最后一句中所解释的,我有一个数组声明中缺少逗号的错误。 –

回答

8

表达

3[4,2] 

被评价为

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

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

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

该语言对待.[]运算符几乎相同,但.与数字文字的符号语法纠结在一起。将左侧转换为对象(如果可能的话;当它是undefined时,您会看到熟悉的“Can not read property foo of undefined”错误)。然后获取属性值(如果存在)。

因此,例如

3["valueOf"] 

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

+0

今天学到了新东西。非常感谢你。 –

+1

'(+'4.3445')[4,3,6,7,'toFixed'](2)//'4.34''。得到它了。 –

相关问题