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

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

相关推荐
灰子学技术5 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰5 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码5 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚5 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
Daniel李华5 小时前
echarts使用案例
android·javascript·echarts
北原_春希5 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
JY-HPS5 小时前
echarts天气折线图
javascript·vue.js·echarts
你这个代码我看不懂5 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
尽意啊5 小时前
echarts树图动态添加子节点
前端·javascript·echarts
吃面必吃蒜5 小时前
echarts 极坐标柱状图 如何定义柱子颜色
前端·javascript·echarts