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

标签 javascript arrays

在某种程度上,可以说是不合逻辑或 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/

相关文章:

php - 取消设置数组中的索引将它变成一个对象

java - 如何使用 Groovy 将子集从字符串数组复制到整数数组?

java - 如何将多行StringBuilder转换为字符数组?

javascript - 我需要组合 2 个简单数组并删除重复项

javascript - 在没有显式 return 语句的情况下返回一个值

c++ - 接受指针数组的输入

java - 如何从二维数组中删除一行?

javascript - 如何提交表单,然后让页面刷新到页面上的那个点

javascript - 使用位置 :sticky for the bottom of a div Container

javascript - $.ajax() 中的 this 关键字调用其他函数来设置 url