[ES6] 三个等号和两个等号 !==和!=

==equality等同 和 ===identity恒等

==两边值类型不一样时,先进行类型转换再比较,===两边类型不一致时,不进行类型转换,类型不同一定不等。

先说恒等===

1.如果类型不同,肯定【不相等】

2.如果两边都是数值型,并且是相同的值,那么【相等】(!例外:如果有一边是NaN 那就【不相等】,判断是不是NaN 用isNaN() 函数)

3.如果两边都是字符串,并且值一样也就是说每个位置的字符一样,那么【相等】

4.如果两边都是true或两边都是false,那么【相等】

5.如果两边引用的是同一个对象,函数,地址等,那么【相等】

6.如果两边都是Null 或者 两边都是undefined,那么【相等】

再说等同==

1.如果两个值的类型相同,使用===比较

2.如果两个值的类型不同,先转换类型再比较

a.如果一边是null  另一边是undefined  那么【相等】

b.如果一个字符串,一个数值,那么把字符串转换成数值再比较

c.如果一边是true,把他转换为1在进行比较,如果一边是false,把他转换为0再进行比较

d.如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。 js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,另说

e.任何其他组合都【不相等】

例如:"1" == true   //类型不等,true会先转换成数值 1,现在变成 "1" == 1,再把"1"转换成 1,比较 1 == 1, 相等。

=赋值

==等于

===严格等于

上例子

var a = 3; 
var b = "3"
a==b true  //类型不同,先转换,字符串3隐式转换数值型,然后相等
a===b  false  //类型不同直接就是不同
//如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字进行比较
1 == '01'    true
1 === '01'   false
'1' == '01'  false
'1' === '01' false

null==null  true
null===null  true
undefined==null  true
undefined===null  false
undefined==undefined  true
undefined===undefined  true
NaN==NaN  false
NaN===NaN  false

特别注意
NaN==NaN  false 
NaN===NaN  false 
//NaN和所有值,包括它自己都不相等

//数组和字符串的比较,空数组被转换为空字符串,非空数组转换为字符串
[]==''  true
[]===''  false
['1','2','3']=="123"  false
['1','2','3']==="123"  false
['1','2','3']=="1,2,3"  true
['1','2','3']==="1,2,3"  false
[]==true  false
[]===true  false

//null和undefined
let n=null  
undefined
n  
null
let u  
undefined
u  
undefined
n==u  
true
n===u  
false
//null和undefined之间==可以为true

//null,undefined和其他类型比较就是false
null==[]
false
null=='1'
false
null==1
false
undefined==1
false
undefined=='1'
false
undefined==[]
false

!==和!= 也和上面一样区别

 

 参考:JavaScript中三个等号和两个等号的区别(== 和 ===)浅析

 参考:三个等号和两个等号的区别(“===”与“==”的区别)

 参考:JS语法中的'=='和'==='和'!='和'!=='

你可能感兴趣的:(JS)