JS中相等()和等全(=)的区别与练习
简介
- 简介
相等()与全等(=)的主要区别是,会进行类型转换,然后=不会进行类型转换,需要内容和类型都相等,才会返回true。
案例
* 案例一
6 == 6; true
6 === 6; true
6 == “6”; true // 这里会进行强制类型转换 使得这个“6”转换成数字6
6 === “6”; false // 左右两边的类型不同 所以不相等
* 案例二
在js里面,true是bool类型,true可以转换成整形的1,false转换成整形的0。
true == 1; true // 这里true通过类型转换可以转换成整型的1
false == 0; true
true === 1; false // 这里为false是因为两边类型不同
false === 0; false
* 案例三
对于一个字符串如果里面什么都没用,或者内容都是空格,那么强制转换之后就是整型的0了。
null与undefined都是假值所以相等,区别是null代表这个位置不应该有值或者为空值,undefined指的是未声明的变量或者没用赋值的变量。
‘’ == 0; true
’ ’ == 0; true
null == undefined; true
null == 0; false // null是空值 空值不是0
undefined == ‘’; false // undefined是未定义, ‘’是已经定义了的一个空字符串
* 案例四
‘false’ == false; false // false强转之后为0 不等于左边的字符串
// 对于NaN代表的是一个范围的意思,一个不是Number的类型中的任意一个,所以
// 它自身不会与自身相等,所以更不会与别的类型相等
NaN == NaN; false
NaN == NaN; false
NaN === false; false
* 案例五
var a = {};
var b = {};
var c = a;
a == b; false
a === b; false
a == c; true
a === c; true
首先是a和b都是保存在栈里面的内存地址,他们在栈里面定义的地方是不相同的,所以为false,他们的内容存储在堆里面,所以 a==c为true,他们的内容是相等的,c和a指向的是同一块堆上面的内存对象。