判斷兩個變數是否相等是程式設計中非常重要的運算。在處理原始值時,這種運算相當簡單,但涉及物件,任務就稍有點複雜。
ecmascript 提供了兩套等性運算子:等號和非等號用於處理原始值,全等號和非全等號用於處理物件。
在 ecmascript 中,等號由雙等號(==)表示,當且僅當兩個運算數相等時,它返回 true。非等號由感嘆號加等號(!=)表示,當且僅當兩個運算數不相等時,它返回 true。為確定兩個運算數是否相等,這兩個運算子都會進行型別轉換。
執行型別轉換的規則如下:
在比較時,該運算子還遵守下列規則:
下表列出了一些特殊情況,以及它們的結果:
表示式值
null == undefined
true
"nan" == nan
false
5 == nan
false
nan == nan
false
nan != nan
true
false == 0
true
true == 1
true
true == 2
false
undefined == 0
false
null == 0
false
"5" == 5
true
等號和非等號的同類運算子是全等號和非全等號。這兩個運算子所做的與等號和非等號相同,只是它們在檢查相等性前,不執行型別轉換。
全等號由三個等號表示(===),只有在無需型別轉換運算數就相等的情況下,才返回 true。
例如:
var snum = "66";在這段**中,第乙個 alert 使用等號來比較字串 "66" 和數字 66,輸出 "true"。如前所述,這是因為字串 "66" 將被轉換成數字 66,,然後才與另乙個數字 66 進行比較。第二個 alert 使用全等號在沒有型別轉換的情況下比較字串和數字,當然,字串不等於數字,所以輸出 "false"。var inum = 66;
alert(snum == inum); //輸出 "true"
alert(snum === inum); //輸出 "false"
非全等號由感嘆號加兩個等號(!==)表示,只有在無需型別轉換運算數不相等的情況下,才返回 true。
例如:
var snum = "66";這裡,第乙個 alert 使用非等號,把字串 "66" 轉換成數字 66,使得它與第二個運算數 66 相等。因此,計算結果為 "false",因為兩個運算數是相等的。第二個 alert 使用的非全等號。該運算是在問:"snum" 與 "inum" 不同嗎?這個問題的答案是:是的(true),因為 snum 是字串,而 inum 是數字,它們當然不同。var inum = 66;
alert(snum != inum); //輸出 "false"
alert(snum !== inum); //輸出 "true"
JS判斷兩個變數是否相等
js中判斷兩個變數是否相等,是我們經常遇到的問題。今天我要 的問題是如何優雅的比較複雜變數。以上的方法都只能比較簡單變數,無法比較引用型別變數 如array,object 如何優雅判斷複雜變數是否相等?不多廢話,直接上 function isobject obj function isequal a...
js 判斷兩個物件是否相等
判斷兩個物件是否相等 isobjectvalueequal function a,b var aprops object.getownpropertynames a var bprops object.getownpropertynames b if aprops.length bprops.len...
js判斷兩個物件是是否相等
用object.is 只能判斷兩個物件應用的位址是不是一樣 如果兩個物件的應用位址不一樣。兩個物件對應的鍵和值是一樣的,應用位址不一樣。那麼這時候判斷兩個物件用object.is就行不通了 思路需要遞迴每個鍵看看對應的值是否一樣。鍵對應的值有兩種可能 如果是基本資料型別 判斷他們的值是否相等就行 如...