9

我经常在 JavaScript 中看到这个:

var val = (myvar / myothervar) | 0;

据我了解,这是在 JavaScript 中设置值的众多快捷方式之一(如~~、 和>> 0等)。但是,我最近在看一段代码,它做到了这一点:

var val = Math.floor(myvar/ myothervar)|0;

他们使用Math.floor(),然后也用0. 作者这样做了很多次,所以这不仅仅是他们做了一次的错字。两者都做你有什么收获?

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

4

1 回答 1

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
于 2013-04-16T20:52:01.713 回答