Как [1,2] + [4,5,6] [1] = 1,25 в JavaScript

Я получил этот вопрос из интервью,

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

JavaScript дает ответ 1,25.

Как это происходит? Пожалуйста, объясните четко.

Ответы

Ответ 1

Давайте начнем с последней части и напишем ее более подробно

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

То же, что и

[4,5,6][1]

а массивы основаны на нулевом значении, что дает 5, поэтому мы действительно имеем

[1,2] + 5;

Первая часть равна

[1,2].toString(),

и возвращает строку "1,2", потому что массив преобразуется в строку при попытке использовать ее в таком выражении, поскольку массивы не могут быть добавлены к числам, а затем мы имеем

"1,2" + 5

Конкатенация строк с номерами дает строки и добавление строк вместе, мы получаем

"1,25"

Ответ 2

Он разбивается следующим образом:

Начиная с:

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

Во-первых, каждая сторона получает оценку, а так как правая часть является инициализатором массива и поиском, она выходит на 5:

[1,2] + 5

Теперь оператор + начинает свою работу. Он не определен для массивов, первое, что он делает, это попытаться преобразовать его операнды в строки или цифры. В случае с массивом это будет строка, как из Array#toString, которая делает Array#join, давая нам:

"1,2" + 5

Когда вы используете +, где каждая из сторон является строкой, результатом является конкатенация строк.

Ответ 3

Сначала [4,5,6][1] оценивает число 5

Затем оператор + применяется к первому аргументу, который является Array, а не a Number, поэтому javascript предполагает, что вы выполняете конкатенацию строк, а не добавление. Ваш массив [1,2] становится строкой, которая "1,2". Вы можете увидеть это самостоятельно с помощью [1,2].toString().

Число 5 теперь добавляется к строке, поэтому оно преобразуется в строку и добавляется вместе, чтобы получить "1,25".