JavaScript
提供两个相等运算符:
==
和
===
。
简单说,它们的区别是相等运算符(
==
)比较两个值是否相等,严格相等运算符(
===
)比较它们是否为“同一个值”。若是两个值不是同一类型,严格相等运算符(
===
)直接返回
false
,而相等运算符(
==
)会将它们转化成同一个类型,再用严格相等运算符进行比较。
*
等于运算符运算规则
对于一个等于表达式:
x==y
1.
当
x
和
y
为同一类型时:
(
1
)若是
x
的类型是
undefined
,则返回
true
;
(
2
)若是
x
的类型是
null
,则返回
true
;
(
3
)若是
x
的类型是
number
,则
a.
若是
x
是
NaN
,则返回
false
b.
若是
y
是
NaN
,则返回
false
c.
若是
x
是和
y
数值同样的
number
,则返回
true
d.
若是
x
是
+0
,
y
是
-0
,则返回
true
e.
若是
x
是
-0
,
y
是
+0
,则返回
true
f.
其它状况则返回
false
;
(
4
)若是
x
的类型是
string
,则只有当
x
和
y
为一样的字符串(相同长度和相同字符在相应的位置)时,返回
true
,不然返回
false
(
5
)若是
x
类型是
boolean
类型,则只有当
x
和
y
同时为
true
或者同时为
false
时,返回
true
,不然返回
false;
(
6
)当
x
和
y
指向同一个对象时,返回
true
,不然返回
false
;
2.
当
x
为
null
,
y
为
undefined
,返回
true
;
3.
当
x
为
undefined
,
y
为
null
,返回
true
;
4.
当
x
为
number
类型,
y
为
string
类型时,返回
ToNumber(x) == y
的比较结果;
5.
当
x
为
string
类型,
y
为
number
类型时,返回
x== ToNumber(y)
的比较结果;
6.
当
x
的类型为
boolean
类型时,返回
ToNumber(x) == y
的比较结果;
7.
当
y
的类型为
boolean
类型时,返回
x== ToNumber(y)
的比较结果;
8.
若是
x
是
string
类型或者是
number
类型,
y
是对象,则返回
x == ToPrimitive(y)
的比较结果
;
9.
若是
x
是对象
,y
是
string
类型或者是
number
类型,则返回
ToPrimitive(x) == y.
的比较结果
;
10.
其它状况,则返回
false
。
注: 在 [] == 0 或者 [] == false 的时候,空数组被转换成了0。可是若是直接使用 if([ ]){ } 的时候, 空数组又被认为是true的。
eg:Boolean([])==true;//true
[]==0;//true
[]==false;//true
[]==true;//false
Boolean('0')==true;//true
"0"==true;//false
0==null;//false
0==false;//true
Boolean(null)==false;//true
null==true;//false
null==false;//false
Boolean(undefined)==false;//true
undefined==true;//false
undefined==false;//false
Boolean({})==true;//true
({})==true;//false
({})==true;//false 数组
*严格等于运算符运算规则
对于一个等于表达式:
x===y
(1)若是x和y的类型不一样,则返回false;
(2)若是x的类型 为undefined,则返回true;
(3)若是x的类型为Null,则返回true;
(4)若是x的类型为Number,则
a.若是x为NaN,则返回false;
b.若是y为NaN,则返回false;
c.若是x是和y同样的Number类型,且数值相同,则返回true;
d.
若是
x
是
+0
,
y
是
-0
,则返回
true;
e.
若是
x
是
-0
,
y
是
+0
,则返回
true;
f.其它状况返回false;
(5)若是x的类型为string,只有当x和y都为string类型,且具备
相同长度和相同字符在相同的位置,则返回true,不然返回false;
(6)若是x为boolean类型,
则只有当
x
和
y
同时为
true
或者同时为
false
时,返回
true
,不然返回
false;
(7)
当
x
和
y
指向同一个对象时,返回
true
,不然返回
false
;
eg:({}==={});//false
[]===[];//false
(function (){} === function (){});//false
null===null;//true
undefined===undefined;//true
NaN === NaN;//false
var v1 = {}; var v2 = v1; v1 === v2;//truespa