You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在JavaScript中10.333333 | 0的结果为10?

JavaScript中10.333333 | 0 === 10的原因解析

嘿,这个问题抓得很准!咱们把这个表达式的细节拆解开来说清楚:

先注意运算符优先级的隐藏坑

你写的10.333333 | 0 === 10,在JavaScript里严格相等运算符===的优先级比按位或|更高,所以实际执行顺序是:

10.333333 | (0 === 10)

0 === 10会返回false,而布尔值参与按位操作时会被转成数字:false对应0,true对应1。所以表达式最终简化为10.333333 | 0,结果自然是10,也就等于后面的10了。

核心原因:按位操作会强制截断小数部分

你猜的完全正确!所有JavaScript的按位操作符(包括|、&、^、~等)在处理非整数时,都会先把数值转换为带符号的32位整数,转换规则就是直接丢弃小数部分——既不是四舍五入,也不是向下取整,就是简单砍掉小数位。

举几个例子验证这个逻辑:

  • 10.999999 | 0 → 10(哪怕小数接近1,也直接截断)
  • -10.333 | 0 → -10(这里要注意,和Math.floor(-10.333)得到-11的逻辑不一样)
  • 0.5 | 0 → 0

回到你的问题,10.333333转换为32位整数后就是10,再和0做按位或操作:因为0的二进制所有位都是0,按位或任何数都不会改变原数,所以结果还是10。

额外小提示

过去很多开发者会用x | 0来快速对正数取整,因为它的执行效率很高。不过现在更推荐用Math.trunc(),它的语义更清晰,专门用来直接截断小数部分,不管正负都能得到符合直觉的结果。

内容的提问来源于stack exchange,提问作者Amr M. AbdulRahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:37:43