js中关于 = 的不同作用
- = :赋值
把右边的值赋值给左边的属性或者变量 - == :比较
不同数据类型时,先进行转换数据类型,再判断两边的值是否相等, - === :绝对相等
先判断两边值的数据类型,如果不是同一数据类型的,直接返回false。如果同类型,再判断是否相等
相同的数据类型比较 ==
基本数据类型中相同类型比较
// 在谷歌浏览器控制台输出
1==1
true
1==2
false
"1"=="1"
true
"1"=="2"
false
null==null
true
undefined==undefined
true
true==true
true
true==false
false
只要 == 号两边的值大小相同或者字符相同时,就是ture
还有一个特殊的 null==undefined
也会是true,都代表空值。但在绝对相同时 null===undefined
时是false,因为类型不同
且null和undefined与其他值永远不相等。NaN不等与任何一个值,包括它自身
引用数据类型进行比较
{}=={}
false
[]==[]
false
var a = {};
var b = a;
a == b
true
var fn1 = function fn(){}
var fn2 = function fn(){}
fn1==fn2
false
fn1 = fn2
fn1 == fn2
true
引用数据类型进行比较时,会查看两边堆内存引用空间地址是否相同,不同的空间地址就不相等
不同的数据类型进行比较
不同类型进行比较时会先隐式转换为相同类型
1=="1"
true
1==true
true
1==null
false
Number(null)
0
1==undefined
false
Number(undefined)
NaN
1=={}
false
Number({})
NaN
toString({})
"[object Undefined]"
Number("[object Undefined]")
NaN
1==[1]
true
Number([1])
1
对象和字符串比较时,会把对象转换成字符串进行比较
var obj = {name:1}
"[object Object]" == obj
true
true=={}
false
true==[1]
true
false==0
true
"1"==true
true
"1"==[1]
true
false==[]
true
总结一点规则,(仅代表个人)
除了对象与字符串进行比较时,会把对象隐式调用toString
转换为字符串进行比较
其他不同类型都会转换为Number
类型来比较。比如下面的练习题:
1==true ===>true
1==false ====false
2==true ===>false
[]==true ==>false
![]==true ==> false
// 先把[]转换为布尔值然后取反,在进行比较
[]==[]
var ary1=[1,2];
var ary2=ary1
ary1==ary2;
加一点:当其他类型直接转换成布尔值的时候 :
- 0
- " "
- NaN
- null
- undefined
除了上面这五个值转换成布尔值是false
之外,其他的都是true