[1,2] + [4,5,6][1] 如何在 JavaScript 中 = 1,25

How [1,2] + [4,5,6][1] = 1,25 in JavaScript

我从面试中得到了这个问题,

[1,2] + [4,5,6][1]

JavaScript给出答案1,25.

这是怎么回事?请解释清楚。

让我们从最后一部分开始,把它写得更冗长

var arr   = [4,5,6];
var value = arr[1];

相同
[4,5,6][1]

并且由于数组是从零开始的,所以得到 5,所以我们确实有

[1,2] + 5;

第一部分等于

[1,2].toString(),

并且 returns 字符串 "1,2" 因为当试图在这样的表达式中使用它时数组被转换为字符串,因为数组不能添加到数字,然后我们有

"1,2" + 5

将字符串与数字连接得到字符串,将字符串相加得到

"1,25"

分解成这样:

开始于:

[1,2] + [4,5,6][1]

首先,对每一边进行求值,由于右侧是数组初始化器和查找,因此结果为 5:

[1,2] + 5

现在 the + operator 开始工作。它不是为数组定义的,它做的第一件事就是尝试将其操作数转换为字符串或数字。在数组的情况下,它将是一个字符串,就好像来自 Array#toString,它确实 Array#join,给我们:

"1,2" + 5

当你使用 + 时,两边都是字符串,结果是字符串连接。

首先,[4,5,6][1] 的计算结果为 5

然后,+ 运算符被应用于第一个参数,它是 Array 而不是 Number,所以 javascript 假设你正在做一个字符串连接,而不是加法。你的数组 [1,2] 变成了一个字符串,即 "1,2"。您可以通过 [1,2].toString().

自己查看

数字 5 现在被附加到一个字符串,因此它被转换为一个字符串,并附加在一起得到 "1,25"