javascript按位运算(&、|)本质操作32位整数,高效源于引擎优化;关键在理解行为边界、避免隐式转换:&用于掩码提取/奇偶判断/清位/截断,|用于设位/向零取整/默认值;误用非整数或重复计算掩码反致低效。

JavaScript 中的按位与(&)和按位或(|)本质是直接操作 32 位整数的二进制表示,底层由引擎优化,天然高效——无需额外“加速技巧”,关键在于**正确理解行为边界并避免隐式类型转换开销**。
按位与(&)的高效使用要点
按位与逐位比较两个操作数,仅当对应位都为 1 时结果位才为 1。它最常用于掩码提取和奇偶判断:
- 检查某一位是否开启:比如
flags & 0b0001判断最低位(即是否为奇数),比num % 2 === 1更快且无浮点误差风险 - 清除特定位:用掩码取反后与原值做 &,如
value & ~0b1100清除第 2、3 位(从 0 开始计),比手动减法或位移组合更简洁可靠 - 确保输入为安全整数:
val & 0xFFFFFFFF可强制截断为 32 位无符号整数(注意符号位影响),适合处理颜色值、状态字节等固定宽度数据
按位或(|)的高效使用要点
按位或逐位比较,任一操作数对应位为 1 则结果位为 1。它擅长合并标志、快速取整和默认值设置:
- 设置特定位:如
flags | 0b1000确保第 3 位为 1,比flags += 8更语义清晰,且不依赖当前值是否已含该位 - 向零取整(仅限非负数):
5.9 | 0→5,比Math.floor()或parseInt()更轻量;但注意-5.9 | 0得-5(实际是向零截断),不是向下取整 - 提供默认整数值:如
config.delay | 300表示若 delay 为 0、null、undefined 或 NaN,就用 300;但需留意0 | 300是 300(因 0 转为 32 位整数后参与运算),所以只适用于“假值中 0 也应被覆盖”的场景
提升效率的关键注意事项
位运算本身极快,但低效往往来自误用:
- 避免对非整数反复运算:
Math.random() * 100 | 0合理,但someFloatValue & 1会先转成 32 位整数(可能丢失精度),若原值本就非整数,应先明确舍入意图 - 别在循环中重复计算掩码:把
1 提前算好存为常量,而非每次循环都左移 - 慎用在大数组上做逐元素位运算:现代 JS 引擎对
.map(x => x & mask)有良好优化,但若逻辑复杂,考虑 TypedArray + WebAssembly 才是真正“高效”的升级路径
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











