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

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

相关推荐
moreen3 分钟前
Koa3.1.2 迁移, 持续更新中
javascript
sg_knight6 分钟前
设计模式实战:策略模式(Strategy)
java·开发语言·python·设计模式·重构·架构·策略模式
麦麦鸡腿堡7 分钟前
JavaWeb_SpringBootWeb,HTTP协议,Tomcat快速入门
java·开发语言
码云数智-园园9 分钟前
前端跨域全解析:核心原理、解决方案选型与实战指南
开发语言
qq_417695059 分钟前
内存对齐与缓存友好设计
开发语言·c++·算法
2301_8166512210 分钟前
实时系统下的C++编程
开发语言·c++·算法
2401_8318249611 分钟前
C++与Python混合编程实战
开发语言·c++·算法
飞Link14 分钟前
告别 ROS 的臃肿:用 ZeroMQ 构建极速具身智能分布式大脑(附 Python 实战)
开发语言·分布式·python
qq_2113874716 分钟前
基于LangGraph多agent
开发语言·前端·javascript·agent·langgraph