我的一位同事偶然发现了一种使用按位或来对浮点数进行底数的方法:
var a = 13.6 | 0; //a == 13
我们正在谈论它并想知道一些事情。
- 它是如何工作的?我们的理论是,使用这样的运算符将数字转换为整数,从而删除小数部分
- 与这样做相比,它有什么优势吗?
Math.floor
?也许速度会快一点? (双关语不是故意的)
- 它有什么缺点吗?也许在某些情况下它不起作用?清晰度是一个显而易见的问题,因为我们必须弄清楚这一点,好吧,我正在写这个问题。
Thanks.
它是如何工作的?我们的理论是,使用这样的运算符会强制转换
数字转换为整数,从而删除小数部分
除无符号右移之外的所有位运算,>>>
,处理带符号的 32 位整数。因此,使用按位运算会将浮点数转换为整数。
与 Math.floor 相比,它有什么优势吗?或许有一点
快点? (双关语不是故意的)
http://jsperf.com/or-vs-floor/2 http://jsperf.com/or-vs-floor/2似乎稍微快一点
它有什么缺点吗?也许在某些情况下它不起作用?
清晰度是显而易见的,因为我们必须弄清楚这一点,而且,
我正在写这个问题。
- 不会通过jsLint。
- 仅 32 位有符号整数
- 奇怪的比较行为:
Math.floor(NaN) === NaN
, while (NaN | 0) === 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)