Чому [5,6,8,7] [1,2] = 8 у JavaScript?


278

Я не можу обернути свою думку навколо цієї вигадки.

[1,2,3,4,5,6][1,2,3]; // 4
[1,2,3,4,5,6][1,2]; // 3

Я знаю [1,2,3] + [1,2] = "1,2,31,2", але не можу знайти, який тип чи операцію виконують.

Відповіді:


387
[1,2,3,4,5,6][1,2,3];
      ^         ^
      |         |
    array       +  array subscript access operation,
                    where index is `1,2,3`,
                    which is an expression that evaluates to `3`.

Другий [...]не може бути масивом, тому це операція з індексом масиву. І зміст операції підписки - це не обмежений список операндів, а єдиний вираз.

Детальніше про оператор з комами читайте тут .


7
правильний .. останній індекс використаний .. більше прикладів: [1,2,3,4,5,6] [1,2,3] === [1,2,3,4,5,6] [3] ; [1,1,1,5,1,1] [3] === [1,1,1,5,1,1] [1,2,3]; таким чином [1,1,1,5,1,1] [3] == 5
мастак

Детальніше про оператор кома читайте ось таке оманливе твердження , оскільки пов'язаний запис вікі говорить про оператор коми в контексті C і C ++, і тут у вас є JavaScript !!
Наваз

108

Тому що (1,2) == 2. Ви натрапили на оператор коми (або тут простіше пояснення ).

Якщо коми не відображаються в списку декларацій, списку параметрів, об'єкта чи літералу, вони діють, як і будь-який інший бінарний оператор. x, yоцінює x, потім оцінює yі дає результат як результат.


21
[1,2,3,4,5,6][1,2,3];

Тут друге вікно тобто [1,2,3]стає [3]тобто останній елемент , так що результат буде 4, наприклад , якщо ви зберігаєте [1,2,3,4,5,6]в масиві

var arr=[1,2,3,4,5,6];

arr[3]; // as [1,2,3] in the place of index is equal to [3]

аналогічно

*var arr2=[1,2,3,4,5,6];

 // arr[1,2] or arr[2] will give 3*

Але коли ви розміщуєте + оператора між ними, то другий квадратний дужок не є для згадування індексу. Це скоріше інший масив. Тому ви отримуєте

[1,2,3] + [1,2] = 1,2,31,2

тобто

var arr_1=[1,2,3];

var arr_2=[1,2];

arr_1 + arr_2; // i.e.  1,2,31,2

В основному в першому випадку він використовується як індекс масиву, а в другому - це сам масив.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.