JS比较运算符:从坑点速记到实战口诀

下面把 JS 里所有比较运算符按"长相"→"功能"→"坑点"→"记忆口诀"四步拆开讲,看完就能当"人肉 linter"。


  1. 相等族(宽松)
    ==
    功能:先强制类型转换 再比较。
    坑点:
    • 0 == false // true
    • '' == false // true
    • ' \t\r\n' == 0 // true
    • null == undefined // true,且仅此一对"特权"
      口诀:
      "== 带隐式,五条怪规则:布尔转数、字符串转数、null 只约 undefined、对象转原始、NaN 谁都不认。"

  1. 相等族(严格)
    ===
    功能:不做类型转换,类型不同直接 false 。
    坑点:
    • NaN === NaN // false(唯一自己不等于自己)
    • +0 === -0 // true(符号位被忽略)
      口诀:
      "=== 不带戏,类型不同就枪毙。"

  1. 不等族
    != 与 !==
    功能:分别对应 == 和 === 的逻辑反 。
    坑点:
    • 5 != '5' // false(因为先转类型后相等)
    • 5 !== '5' // true
      口诀:
      "叹号在前,就是取反,宽松严格各自算。"

  1. 顺序族(数字语义)
    < > <= >=
    功能:
    • 两边都是字符串 → 按 Unicode 码点逐位比(字典序)。
    • 否则 → 两边都先转数字 再比。
      坑点:
    • '10' > '2' // false(字符串比,'1'<'2' 直接出局)
    • '10' > 2 // true(转数字 10>2)
    • null >= 0 // true(null 转 0)
    • undefined >= 0 // false(undefined 转数字得 NaN,任何比较都 false)
      口诀:
      "同为字符串才字典,其余一律先转数;null 变 0,undefined 变 NaN,NaN 出马全 false。"

  1. 对象比较彩蛋
    功能:对象先调用 ToPrimitive(先 valueOf 再 toString),变成原始值后再走上面规则。
    例子:

    js 复制代码
    var a = [1];
    var b = [2];
    a < b   // true  → [1].valueOf() 得 '1',再转数字 1 < 2

  1. NaN、±0 小结表

    表达式 结果 原因
    NaN == NaN false IEEE 754 规定
    +0 == -0 true 同值零
    Object.is(NaN, NaN) true ES6 提供的"最严格"比较
    Object.is(+0, -0) false 可区分符号零

速记总口诀

"三等不带戏,双等带隐式;

字符串字典序,别的先转数;

null 特权遇 undefined,NaN 出现全是拒;

对象先拆箱,比较不迷路。"

相关推荐
默_笙36 分钟前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
呃呃呃呃ex37 分钟前
10. 现代前端工程化:ES6 React 项目实战与原理解析
前端·javascript
浪遏38 分钟前
D2C 系统架构复盘:从设计稿到代码,我们踩过的坑和最终方案
前端·javascript·后端
Blanche15001 小时前
Webpack 构建流程解析
javascript·面试
Flynt1 小时前
官方说一个破折号拖慢整段高亮,我在 Node 里验证了一遍:机制是真的,2.8 倍没跑出来
javascript·性能优化·v8
默_笙1 小时前
🚗 把小说装进数据库了:我的第一个 RAG,和它的五个硬伤
前端·javascript
像我这样帅的人丶你还1 小时前
📱iPhone Duo 开屏动画咋实现的?
javascript·webgl·three.js
Leslie1651 小时前
把 SQL 性能诊断接入模型 API:从谓词分析到可验证优化
javascript
gnip1 小时前
UniApp 内嵌 H5 通信全攻略
前端·javascript
用户6802659051191 小时前
企业电脑统一管理怎么做?2026企业终端统一管理方法与工具推荐
javascript·后端·面试