5

Logic của các toán tử bitwise trên undefined là gì?Cạm bẫy JavaScript không xác định rõ ràng?

var x; 
console.log(x);  // undefined 
console.log(x^7); // 7 
console.log(7^x); // 7 
console.log(x|7); // 7 
console.log(7|x); // 7 
console.log(7&x); // 0 
console.log(x&7); // 0 
console.log(~x); // -1 
console.log(x*2); // NaN 
console.log(x/2); // NaN 
console.log(x+2); // NaN 
console.log(x-2); // NaN 

Tôi có thể thấy một số ý nghĩa trong NaN. Bởi vì không xác định -2 thực sự là 'không phải là một số'. Nhưng tôi không làm theo bất kỳ logic trên các nhà khai thác bitwise và không xác định.

+2

hoạt động Bit chỉ có ý nghĩa về số nguyên, vì vậy các đối số sẽ được tự động cưỡng chế thi hành loại đó. – Barmar

+0

Có, tôi mong đợi nó sẽ ném một lỗi hoặc một cái gì đó có ý nghĩa. Sự ép buộc im lặng đó tạo ra vòng lặp vô hạn trong mã của tôi. – CoR

Trả lời

6

Hàm bên trong [ToInt32] được gọi trên tất cả các toán hạng cho tất cả toán tử bitwise.

Lưu ý rằng ToInt32(undefined) -> 0 và phạm vi là [0, 2^32)

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