Tại sao [5,6,8,7] [1,2] = 8 trong JavaScript?


278

Tôi không thể bao bọc tâm trí của mình xung quanh vấn đề này.

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

Tôi biết [1,2,3] + [1,2] = "1,2,31,2", nhưng tôi không thể tìm thấy loại hoặc hoạt động đang được thực hiện.

Câu trả lời:


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`.

Thứ hai [...]không thể là một mảng, vì vậy nó là một hoạt động đăng ký mảng. Và nội dung của một hoạt động đăng ký không phải là một danh sách các toán hạng được phân tách, mà là một biểu thức duy nhất.

Tìm hiểu thêm về toán tử dấu phẩy ở đây .


7
đúng .. chỉ số cuối cùng được sử dụng .. ví dụ khác: [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]; theo cách này [1,1,1,5,1,1] [3] == 5
mastak

Đọc thêm về toán tử dấu phẩy ở đây là một tuyên bố sai lệch , vì mục wiki được liên kết nói về toán tử dấu phẩy trong ngữ cảnh C và C ++ và ở đây bạn có JavaScript !!
Nawaz

108

Bởi vì (1,2) == 2. Bạn đã vấp phải toán tử dấu phẩy (hoặc giải thích đơn giản hơn ở đây ).

Trừ khi dấu phẩy xuất hiện trong danh sách khai báo, danh sách tham số, đối tượng hoặc mảng bằng chữ, chúng hoạt động như bất kỳ toán tử nhị phân nào khác. x, yđánh giá x, sau đó đánh giá yvà mang lại kết quả.


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

Ở đây, hộp thứ hai tức là [1,2,3]trở thành [3]mục cuối cùng, vì vậy kết quả sẽ là 4, ví dụ nếu bạn giữ [1,2,3,4,5,6]trong một mảng

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

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

tương tự

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

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

Nhưng khi bạn đặt một toán tử + ở giữa thì dấu ngoặc vuông thứ hai không được đề cập đến chỉ mục. Nó là một mảng khác Đó là lý do tại sao bạn nhận được

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

I E

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Về cơ bản trong trường hợp đầu tiên, nó được sử dụng như là chỉ mục của mảng và trong trường hợp thứ hai, bản thân nó là một mảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.