我的一位同事偶然发现了一种使用按位或的方法来设置浮点数:

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

我们在谈论它,想知道一些事情.

  • 它是如何工作的?我们的理论是,使用这样的运算符将数字转换为整数,从而删除小数部分
  • 它比Math.floor有什么优势吗?也许会快一点?(双关语并非有意)
  • 它有什么缺点吗?也许它在某些情况下不起作用?清晰是显而易见的,因为我们必须弄清楚,好吧,我正在写这个问题.

谢谢.

推荐答案

它怎麽工作?我们的理论是,使用这样的运算符会将 数字转换为整数,从而删除小数部分

除无符号右移位>>>外,所有按位运算都处理有符号的32位整数.因此,使用按位运算会将浮点数转换为整数.

它比做数学有什么优势吗.地板也许有点

http://jsperf.com/or-vs-floor/2看起来稍微快一点

它有什么缺点吗?也许它在某些情况下不起作用?

  • 不会通过jsLint.
  • 仅限32位有符号整数
  • 奇怪的比较行为:Math.floor(NaN) === NaN,而(NaN | 0) === 0

Javascript相关问答推荐

如何在dataTables PDF输出中正确渲染字形?

使用redux-toolet DelivercThunks刷新访问令牌

TypScript界面中的Infer React子props

如何才能拥有在jQuery终端中执行命令的链接?

屏幕右侧屏障上的产卵点""

我在我的Java代码中遇到了问题,代码的一部分看不到先前定义的对象

简单的PayPal按钮集成导致404错误

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

正则表达式,允许我匹配除已定义的子字符串之外的所有内容

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

如何使用JS创建一个明暗功能按钮?

将对象推送到数组会导致复制

如何在HTMX提示符中设置默认值?

如何用javascript更改元素的宽度和高度?

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

如果NetSuite中为空,则限制筛选

如何在尚未创建的鼠标悬停事件上访问和着色div?