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(先 valueOftoString),变成原始值后再走上面规则。
    例子:

    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 出现全是拒;

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

相关推荐
To_OC6 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
小林ixn8 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
窝子面10 小时前
手搓最简前后端协作-node
javascript·数据库
人邮异步社区11 小时前
怎么把C语言学到精通?
c语言·开发语言
kyriewen11 小时前
我让AI给前端项目做了一次完整的Code Review——它和人类的差距,比我想的大得多
前端·javascript·ai编程