按位或将floor转换为number

var a = 13.6 | 0; //a == 13

这是如何工作的?

除了无符号右移>>> 之外的所有按位运算都适用于带符号的32位整数。因此使用按位运算会将float转换为整数。

与比Math.floor有什么优势?

快一丢丢
按位或将floor转换为number

有什么缺点?

  • 不会传递 jsLint
  • 仅限于32位无符号整型
  • 有些时候会有奇怪的表现
Math.floor(NaN) === NaN

(NaN | 0) === 0

实际上,这不是约等于而是截断

在ECMAScripts 6中,类似于Math.trunc