我经常在JavaScript中看到这个:
var val = (myvar / myothervar) | 0;
据我所知,这是在JavaScript中设置值的众多快捷方式之一(如~~
和>> 0
等)。但是,我最近看了一段代码:
var val = Math.floor(myvar/ myothervar)|0;
他们使用了Math.floor()
,然后还与0
进行了按位OR。作者多次这样做,所以这不是他们曾经做过的错字。你们两个都得到了什么?
对于好奇的人,可以找到我所指的代码here
答案 0 :(得分:9)
你可能没有想过:
Math.floor(NaN) == NaN
(好吧,不是,但Math.floor(NaN)
是NaN
)Math.floor(NaN) | 0 == 0
也与Infinity
正如@apsillers所指出的,这可能是为了消除Infinity
:
var x = 1;
console.log(Math.floor(1 / x)); // 1
console.log(Math.floor(1 / x) | 0); // 1
x = 0;
console.log(Math.floor(1 / x)); // Infinity
console.log(Math.floor(1 / x) | 0); // 0