Math.floor()| 0

Cha*_*had 9 javascript math

我经常在JavaScript中看到这个:

var val = (myvar / myothervar) | 0;
Run Code Online (Sandbox Code Playgroud)

其中,据我了解是许多快捷键地板在JavaScript中的值(如之一~~,和>> 0等).但是,我最近看了一段代码:

var val = Math.floor(myvar/ myothervar)|0;
Run Code Online (Sandbox Code Playgroud)

他们使用Math.floor()然后也做了一个按位OR 0.作者多次这样做,所以这不仅仅是他们曾经做过的错字.两者都有什么收获?

对于好奇,我指的代码可以在这里找到

Eri*_*ric 9

你可能没有想到:

  • Math.floor(NaN) == NaN(好吧,不是真的,但是Math.floor(NaN)NaN)
  • Math.floor(NaN) | 0 == 0

也适用于 Infinity

正如@apsillers所指出的,这可能是消除Infinitys:

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
Run Code Online (Sandbox Code Playgroud)

  • 因为所有这些楼层捷径都没有考虑到超过32位的数字.将`Math.floor(Number.MAX_VALUE)`与`Number.MAX_VALUE |进行比较 0`,任何高于32位int的内容都会使用任何按位快捷键错误,因为即使int大于此值,它们也会以32位运行,但是`Math.floor`会正确地解释它.使用`1099511627776`可以看到相同的结果,即2到40次幂. (3认同)