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