JS中的等值判断并非只有==和===

严格相等

为===使用的等值判断方式

类型不同直接返回false

类型相同:

  • +0与-0相等
  • NaN和NaN不相等
  • undefined与undefined相等
  • null与null相等
  • 指向同一地址的对象相等
  • 顺序相同的字符串相等

使用严格相当的场景

  • switch case - ===
  • indexOf lastIndexOf

宽松相等

类型不同则进行类型转换,规则详见js类型转换 todo

类型相同时,除了以下规则外与严格相等相同

  • document.all与undefined相等
  • document.all与null相等

这其实不符合ES规范,ES规范所有对象和原始值都不与undefined和null相等,这更像是浏览器BUG,但是也没人进行这个比较吧?

只用于==

同值相等

Api中的只用于Object.is,多用于语言内部

  • NaN与NaN相等
  • +0和-0不相等

存在的意义:

js 复制代码
Object.defineProperty(Number, "NEGATIVE_ZERO", {
  value: -0,
  writable: false,
  configurable: false,
  enumerable: false,
});

function attemptMutation(v) {
  Object.defineProperty(Number, "NEGATIVE_ZERO", { value: v });
}

attemptMutation(-0)//不报错
attemptMutation(0)//报错

如上代码,当规定了一个不可变属性,此时需要严格判断+0和-0,当然也需要判断NaN,主观上这样更加合理

当语言期望一个值等于另外一个值的时候,几乎所有地方都是用同值相等。

可以借助以上例子理解语言内部的含义

零值相等

与同值相等的区别是:+0和-0相等

不作为Api公开

用于:

  • 数组的includes
  • map的键值判断
  • set的判断

注意点

当任何需要等值判断的时候,可以对其用的什么类型等值判断敏感一些,这样可能能避免一些问题

相关推荐
w2sfot1 小时前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
杨杰3985 小时前
我给嵌入式设备写了个 6MB 的 JavaScript 运行时(xuan)
javascript
只睡四小时6 小时前
AI 生成 PPTX:11 页课件编译出 429 个形状
javascript·python·pptx·ai生成ppt·ooxml
shmily麻瓜小菜鸡7 小时前
Axios 中 params 与 data 的区别与原理
javascript·typescript
isha7 小时前
Univer拆解——从类与方法的视角分析
前端·javascript
变与不变8067 小时前
GET请求知识详解
前端·javascript
哎哟喂呢哈9 小时前
VedioJS 10
javascript·html5
夏幻灵17 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
三天不学习18 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
xcs1940519 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js