Tôi đang quan tâm đến các toán tử bitwise trong JavaScript và có một điều tôi thấy đáng chú ý.Tại sao (Vô cực | 0) === 0?
bitwise or operator trả về 1
làm bit đầu ra nếu một trong hai bit đầu vào là 1
. Vì vậy, làm x | 0
luôn trả x
, vì | 0
không có tác dụng:
(1 | 0) === 1
(0 | 0) === 0
Tuy nhiên, khi tôi tính Infinity | 0
, tôi đã 0
. Điều này là đáng ngạc nhiên trong quan điểm của tôi, bởi vì ở trên nên nhận được Infinity
. Xét cho cùng, (x | 0) === x
.
Tôi không thể tìm thấy vị trí trong đặc tả ECMAscript được xác định rõ ràng, vì vậy tôi đã tự hỏi chính xác những gì ngụ ý rằng (Infinity | 0) === 0
. Có lẽ là cách Infinity
được lưu trữ trong bộ nhớ? Nếu vậy, làm thế nào nó vẫn có thể làm một hoạt động | 0
làm cho nó trở lại 0
trong khi | 0
không nên làm bất cứ điều gì?
Làm cách nào bạn có thể tính toán '(vô cùng | 0)'? Vô cực là ... vô hạn, nó không thể được tính bằng chính định nghĩa của nó ...: | – Albireo
@Albireo - Bởi vì một máy tính phải đại diện cho vô cực bằng cách nào đó, và nó có một số giới hạn các bit để làm điều đó với. – Dylan
Điều này thực sự thú vị, bởi vì 'Infinity' dường như là một giá trị trung thực khi bạn sử dụng nó trong một câu lệnh if-else, giống như câu lệnh mong đợi. Tôi vừa xác nhận điều này: http://jsfiddle.net/LWBVd/. Có lẽ nó đã làm với các đại diện nội bộ của 'Infinity'. – FishBasketGordo