Nó sẽ được đánh giá như dưới đây,
1:+[] == 0
->+"" == 0
hành +
là có highest priority hơn ==
vì vậy nó sẽ được đánh giá Đầu tiên. Vì vậy, trong quá trình chuyển đổi một mảng thành số, hàm ToPrimitive()
sẽ được gọi bằng cách chuyển nó thành một đối số. Kể từ []
là một object
, nó sẽ trở lại ""
chuỗi
2:+"" == 0
->0 == 0
Chuỗi trống sẽ được chuyển đổi sang 0
. Và một chuỗi không trống sẽ được chuyển đổi thành NaN
như chúng ta đều biết.
3:0 == 0
->true
Và cuối cùng theo abstract equality comparison algorithm, khi cả hai toán hạng của cùng loại bị so sánh, không có đánh giá thêm sẽ xảy ra, nó sẽ trực tiếp kiểm tra cho sự bình đẳng của nó và trả lại kết quả.
Và trong trường hợp thứ hai của bạn 1+[+[]]
, đánh giá sẽ xảy ra như thế nào,
1:1+[+[]]
- (+[]
sẽ được chuyển đổi sang nguyên thủy đầu tiên kể từ []
nó là một đối tượng)
2:1+[+""]
(toPrimitive([])
sẽ ""
)
3:1+[0]
(0
sẽ mang lại khi bạn chuyển đổi một chuỗi rỗng lên vị trí số)
4:1+"0"
(toPrimitive([0])
sẽ "0"
)
5:"10"
Nguồn
2016-03-19 12:00:49
có giao diện tại đây: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators – C2486
http://stackoverflow.com/a/5491730/1377002 – Andy