在某种程度上,可以说是不合逻辑或 mock 的,我可以理解 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
错误。
这里发生了什么?
上下文:花了一个早上的时间查找并解决了一个错误,其中 ,
(逗号)从 a 的数组中丢失数字和嵌套数组的混合:[1, 2, 3 [4, 2], 5, [8], 7]
。
最佳答案
表达式
3[4,2]
被评估为
(new Number(3))[4, 2]
属性查找操作。 4,2
表达式是逗号运算符 的一个例子,它的值是子表达式列表中的最后一个,2
。
运行时创建的 Number 实例没有名为“2”的属性,因此结果为 undefined
。
该语言对待 .
和 []
运算符几乎相同,尽管 .
与数字文字的标记语法纠缠在一起.左侧被转换为对象(如果可能;当它是 undefined
时,您会得到熟悉的“无法读取未定义的属性 foo”错误)。然后获取属性值(如果存在)。
比如
3["valueOf"]
不是 undefined
:它是对 Number.prototype.valueOf
函数的引用。
关于javascript - 为什么 3 [4,2] 在 JS 中评估为未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45438628/