[Javascript] 等号运算符的运算和转换规则

==

从上到下按照规则比较,直到能够得到确切结果为止:
1. 两端存在 NaN,返回 false
2. undefined 和 null 只有与自身比较,或者互相比较时,才会返回 true,和其他原始类型比较返回 false
3. 两端类型相同,比较值
4. 两端都是原始类型,转换成数字重新比较


5. 一端是原始类型,一端是对象类型,把对象转换成原始类型后重新比较

 

对象如何转原始类型?


1. 如果对象拥有 [Symbol.toPrimitive] 方法,调用该方法。
  若该方法能得到原始值,使用该原始值;
  若得不到原始值,抛出异常
2. 调用对象的 valueOf 方法
  若该方法能得到原始值,使用该原始值;
  若得不到原始值,进入下一步
3. 调用对象的 toString 方法
  若该方法能得到原始值,使用该原始值;
  若得不到原始值,抛出异常

 

let count = 0
const a = {
  [Symbol.toPrimitive]() {
     return ++count
  }
}

if (a == 1 && a == 2 && a ==3) {
   console.log('it works')
}

 

posted @   Zhentiw  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2022-11-29 [CSS3] Container query
2022-11-29 [Typescript] 121. Hard - IsPalindrome
2020-11-29 [Java Srping] @RestController and @Controller
2020-11-29 [Java Spring] Testing a view controller
2019-11-29 [Algorithm] BFS vs DFS
2017-11-29 [ES2017] Iterate over properties of an object with ES2017 Object.entries()
2016-11-29 [Elm] Installing and setting up Elm
点击右上角即可分享
微信分享提示