2012-06-14 38 views
10

Bằng cách nào đó, JavaScript có ý nghĩa của bitwise operationsNaN^1, Infinity^1 và thậm chí 'a'^1 (tất cả đều được đánh giá là 1).Hoạt động bitwise trên số không

Quy tắc điều chỉnh các toán tử bitwise trên số không là gì? Tại sao tất cả các ví dụ trên đều được đánh giá là 1?

Trả lời

7

Theo ES5 spec, khi thực hiện bitwise operations, tất cả các toán hạng được chuyển đổi thành ToInt32 (mà đầu tiên gọi ToNumber. Nếu giá trị là NaN hoặc Infinity, nó chuyển đổi sang 0).

Như vậy: NaN^1 =>0 XOR 1 =>1

+1

Những đặc tả ..... 1 Và tôi nghĩ đó là 'chức năng Bitwise (obj) { if (typeof o == "Số"!) Return 1; } ' – gdoron

+0

@gdoron: Gotta yêu thích thông số :-P –

+1

Nếu họ cho tôi đại diện của bạn, tôi sẽ. ':)' Chỉ đáng nói rằng kết quả phụ thuộc vào toán hạng thứ hai. Ví dụ: '" A "^ 2 === 2 // true' – gdoron

2

ECMA-262 định nghĩa trong 11.10 rằng lập luận của các nhà khai thác Bitwise nhị phân được chuyển đổi với ToInt32. Và 9.5 giải thích ToInt32 nói trong hai điểm đầu tiên của nó:

  1. Hãy để số là kết quả của việc gọi ToNumber trên đối số đầu vào.
  2. Nếu số là NaN, +0, -0, + Inf hoặc -Inf, trả về +0.
Các vấn đề liên quan