一、概念
不全等符号(即非严格相等),是ES2015中出现的相等算法。
是用于比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符=== 的比较方式。
关于非严格相等==的概念知识可以在MDN网中看一下,链接戳这里👇
JavaScript 中的相等性判断
二、知识点
关于非严格相等符号,这里有一些需要了解的知识点:
==进行比较的时候,如果左右两边数据类型不一样,则先转换为相同的数据类型,然后再进行比较。
- {}=={} 两个对象进行比较,比较的是堆内存的地址;
- null==undefined 相等,
而 null === undefined不相等; - NaN == NaN不相等(NaN和谁都不相等)
- [12] == ‘12’ 对象和字符串比较,是把对象toString()转换成字符串后再进行比较的;
- 空字符串"" == null 不相等
⚠️这里需要注意的是,虽然空字符串转成数字为0,而null转成数字也为0,但是结果并不成立,是特殊情况。
null与空字符串的区别:
(1)null不指向任何对象,相当于没有任何值;而“”代表一个长度为0的字符串;
(2)null不分配内存空间;而“”会分配内存空间
- 除以上五种特殊情况,剩余所有情况在进行比较时,都是转换成数字再比较。(前提是数据类型不一样)
(1) 对象转数字 => 先转换为字符串,然后再转换成数字;
(2) 字符串转数字 => 只要出现一个非数字字符,结果就是NaN;
(3) 布尔转数字 => true转为1,false转为0;
(4) null转为数字0;
(5) undefined转数字NaN。
三、举例
- 判断[12] == true
理由:
[12] => Number([12].toString()) = Number(“12”) = 12
true => 1
即 12 == 1,故结果为false。
控制台验证:
———————————————————————————— - 判断[] == false
理由:
[] => Number([].toString()) = Number[""] = 0
false => 0
即 0 == 0,故结果为true。
控制台验证:
———————————————————————————— - 判断true == 2
理由:
true => 1
即1 == 2,故结果为false。
控制台验证:
【 以上是本人学习探索中记下的笔记,仅以供分享学习。如有雷同,无意冒犯,请务必及时告知,立即更正!】