js中 與 的區別

2021-08-13 21:53:59 字數 1639 閱讀 4551

為了減少概念混淆,應該把 =稱作(得到或者賦值),==稱作(相等),===稱作(嚴格相等)

相同點:

它們兩個運算子都允許任意型別的的運算元,如果運算元相等,返回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 此時,型別仍不同,繼續進行型...