為了減少概念混淆,應該把 =稱作(得到或者賦值),==稱作(相等),===稱作(嚴格相等)
相同點:
它們兩個運算子都允許任意型別的的運算元,如果運算元相等,返回true,否則返回false
不同:
== :
(1)如果兩個值型別相同,再進行三個等號(===)的比較
(2)如果兩個值型別不同,也有可能相等,需根據以下規則進行型別轉換在比較:
1)如果乙個是null,乙個是undefined,那麼相等
2)如果乙個是字串,乙個是數值,把字串轉換成數值之後再進行比較
=== :
(1)如果型別不同,就一定不相等
(2)如果兩個都是數值,並且是同乙個值,那麼相等;如果其中至少乙個是nan,那麼不相等。(判斷乙個值是否是nan,只能使用isnan( ) 來判斷)。且nan不等於nan和+0等於-0;
(3)如果兩個都是字串,每個位置的字元都一樣,那麼相等,否則不相等。
(4)如果兩個值都是true,或是false,那麼相等
(5)如果兩個值都引用同乙個物件或是函式,那麼相等,否則不相等
(6)如果兩個值都是null,或是undefined,那麼相等
var num = 1;
var str = '1';
var test = 1;
test == num //true 相同型別 相同值
test === num //true 相同型別 相同值
test !== num //false test與num型別相同,其值也相同, 非運算肯定是false
num == str //true 把str轉換為數字,檢查其是否相等。
num != str //false == 的 非運算
num === str //false 型別不同,直接返回false
num !== str //true num 與 str型別不同 意味著其兩者不等 非運算自然是true啦
注意:
(1)對於array,object等高階型別,==和===是沒有區別的
(2)基礎型別與高階型別,==和===是有區別的。對於==,將高階轉化為基礎型別,進行「值」比較。因為型別不同,===結果為false。
es6
以上的相等都是基於es5的,但在es6中新增了乙個用來判斷兩個值是否相等的方法。es6 提出「same-value equality」(同值相等)演算法,用來解決這個問題。object.is
就是部署這個演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致。
區別是:一是+0
不等於-0
,二是nan
等於自身。
+0 === -0 //true
nan === nan // false
object.is(+0, -0) // false
object.is(nan, nan) // true
js中 與 的區別
為了減少概念混淆,應該把 稱作 得到或者賦值 稱作 相等 稱作 嚴格相等 相同點 它們兩個運算子都允許任意型別的的運算元,如果運算元相等,返回true,否則返回false 不同 運算子稱作相等,用來檢測兩個運算元是否相等,這裡的相等定義的非常寬鬆,可以允許進行型別轉換 用來檢測兩個運算元是否嚴格相等...
js中「 」與 的區別
一言以蔽之 先轉換型別再比較,先判斷型別,如果不是同一型別直接為false。下面分別說明 先說 這個比較簡單。下面的規則用來判斷兩個值是否 相等 1 如果型別不同,就 不相等 2 如果兩個都是數值,並且是同乙個值,那麼 相等 例外 的是,如果其中至少乙個是nan,那麼 不相等 判斷乙個值是否是nan...
JS中 與 的區別
比較運算子中的相等,用來檢測兩邊的值是否相等,這裡的相等定義的非常寬鬆,存在隱式轉換,可以允許進行型別轉換。1 true 以及 1 1左側為字元型,右側為布林型或數值型,左右兩側型別不同,但結果為true。右側為布林型時,先進行型別轉換,把true轉換為1,即為 1 1 此時,型別仍不同,繼續進行型...