2011-11-19 31 views
10

thể trùng lặp:
Can you explain why ++[[]][+[]]+[+[]] = 10mảng JavaScript lên vị trí số

Tôi đang tự hỏi cái gì đó cho vài ngày ... Tôi biết rằng toán tử cộng chỉ trong JavaScript đầu tiên chuyển đổi nó là toán hạng để Số. Tôi đang áp dụng + để một mảng trống rỗng và tôi nhận được kết quả sau:

+[] == 0 

Khi tôi làm điều này:

+[1] == 1 

Nhưng:

+[1,2] == NaN 

Hai điều cuối cùng hầu như rõ ràng nhưng tại sao mảng trống là 0 ?! Đây có phải là kết nối với:

[] == false 

Một số lần ECMAScript khiến tôi tự hỏi rất nhiều ...

alert([![]+[]][+[]][+[]]+[![]+[]][+[]][+!+[]]+[!+[]+[]][+![]][+![]]+[![]+[]][+[]][+!+[]]+[![]+[]][+[]][+!+[]+!+[]]+' '+(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]); 

Trân trọng!

+7

http://stackoverflow.com/questions/7202157/can-you-explain-why-10/7202287#7202287 ở cuối, tôi đã đăng giải thích cho '+ [] === 0'. – pimvdb

+1

@pimvdb Đó chỉ là bệnh ... câu trả lời tuyệt vời mặc dù. –

+0

Cảm ơn bạn! Câu trả lời chính xác! –

Trả lời

5

Các hình thức chuyển đổi thành chuỗi của trống Array là một chuỗi rỗng:

> [].toString() 
"" 

Nhà điều hành unary + chuyển đổi để Number đối tượng, vì vậy, nó chuyển đổi một chuỗi rỗng để 0:

> Number("") 
0 

này giải thích lý do tại sao +[] == 0 là đúng sự thật.

Các vấn đề liên quan