JS运算符考察底层逻辑:==执行抽象相等(含类型转换),===先判类型再比值;++i先增后用,i++先用后增;浮点数需防精度误差,位运算会转32位整数;一元正负号按优先级从右向左解析。

JS 运算符看似简单,但面试官常借它考察你对语言底层逻辑的把握——比如类型转换规则、优先级陷阱、一元/二元运算符混用、浮点精度边界等。答得快不如答得准,关键在三点:说清行为依据、指出常见误判点、给出安全实践。
搞懂 == 和 === 的本质区别
别只背“一个会转类型,一个不转”。要讲清楚:
-
== 是抽象相等:按 ECMA-262 抽象相等算法执行,涉及 null/undefined 特殊处理、字符串转数字、对象调用
toString()或valueOf()等隐式步骤 -
=== 是严格相等:先比类型,类型不同直接返回
false;类型相同再比值(原始值直接比,对象比引用) - 高频陷阱示例:
0 == false→true(false转为0);'' == false→true(空字符串转为0);但0 === false和'' === false全是false
吃透递增/递减的执行顺序
面试爱考混合表达式,核心就一条:前置(++i)先改后用,后置(i++)先用后改。重点看它在表达式中的位置:
-
let i = 1; console.log(i++ + ++i);→ 先取i=1(后置),i变成 2;再++i使i变 3 并取 3;结果1 + 3 = 4 - 单独一行写
i++或++i效果一致,但联用时差一个“时机” - 建议:除非明确需要副作用顺序,否则避免在复杂表达式中混用,用
i += 1更清晰
警惕浮点数与位运算的隐藏坑
这两类运算不常写,但一问就暴露基础是否扎实:
-
浮点精度问题:不是 JS 特有,而是 IEEE 754 双精度限制。如
0.1 + 0.2 === 0.3返回false(实际是0.30000000000000004)。安全做法:用Number((0.1 + 0.2).toFixed(10))或乘整数再除,或引入decimal.js -
位运算符只认整数:所有操作数会被转为 32 位有符号整数(
ToInt32)。例如3.9 | 0→3,-5.7 | 0→-5。常用技巧:~~num、num | 0快速取整(但注意负数截断非四舍五入) - 判断奇偶更推荐
num % 2 === 0,位运算num & 1虽快,但对负数结果易混淆(如-3 & 1 === 1,仍是奇数)
一元正负号连用的解析逻辑
像 1 + - + + + - + 1 这类题,本质是考察运算符优先级和一元/二元上下文识别:
- 所有
+和-先按一元运算符解析(因紧贴操作数),仅剩最左边的+是二元加法 - 从右向左归约:
+1→1,- (+1)→-1,+ (-1)→-1……最终简化为1 + 1 - 解法口诀:去掉所有无意义的
+(一元正号不改变值),把相邻-看作“负负得正”,再逐层剥开


















