"=="比较时的互换规则

1. "=="相等,两边数据类型不同,需要先转为相同类型,然后再比较

@1. 对象==字符串 需要对象转为字符串[Symbol.toPrimitive] --> valueOf() --> toString()
关于Symbol.toPrimitive:https://www.jianshu.com/p/0afef687ca7e

@2. null == undefiend --> true 但是null/undefined和任何值都不相等


image.png

image.png

@3. 对象==对象 比较的时对内存地址,地址相同则相等

{} == {} --> false


image.png

因为这是开辟两个不同的堆内存地址,所以不相等

@4 NaN == NaN -->false


image.png

NaN和任何数不相等,包括它自己

@5. 除了以上情况,只要两边类型不一致,剩下的都是转为数字,然后再进行比较


image.png

第一个,true转为数字时1,字符串'1'转为数字也是1,所以是true
第二个,true转为数字时1,字符串'2'转为数字也是2,所以是false
练习题:

console.log([] == false)
// 都要转为数字再比较
// Number([]) --> Symbol.toPrimitive  --> valueOf  -- toString([]) -- > '' --> Number('')  --> 0
// false变成数字也是0
// 所以结果是true
console.log(![] == false)
// ![]  !Boolean([]) --> !true --> false
// false == false -->true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文是学习数据类型时做的知识整理笔记,发现了很多知识漏洞。 在 JavaScript 编程中,我们经常会遇到...
    布纳纳大草莓阅读 167评论 0 0
  • 一、Let和Const let声明变量,可变 const定义常量(实际指的是变量和的内存地址),不可变 只能在其声...
    Sunflower_ca62阅读 199评论 0 0
  • Es6 1.数组 1.扩展运算符 是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参...
    林深不見鹿阅读 231评论 0 0
  • 目前 JavaScript 仍是前端开发的灵魂,各种层出不穷的框架其实都是与底层相关。 开始之前,借前端三元同学的...
    WEB前端含光阅读 327评论 0 0
  • js中,涉及类型转换主要有以下几种: if() 将内容转换为布尔值,为false的值包括:false undefi...
    羽晞yose阅读 285评论 0 0