判斷兩個變數是否相等是程式設計中非常重要的運算。在處理原始值時,這種運算相當簡單,但涉及物件,任務就稍有點複雜。
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"
ECMAScript 運算子 位運算子
位運算子是在數字底層 即表示數字的 32 個數字 進行操作的 重溫整數 ecmascript 整數有兩種型別,即有符號整數 允許用正數和負數 和無符號整數 只允許用正數 在 ecmascript 中,所有整數字面量預設都是有符號整數,這意味著什麼呢?有符號整數使用 31 位表示整數的數值,用第 32...
js左移運算子 ECMAScript 位運算子
重溫整數 ecmascript 整數有兩種型別,即有符號整數 允許用正數和負數 和無符號整數 只允許用正數 在 ecmascript 中,所有整數字面量預設都是有符號整數,這意味著什麼呢?有符號整數使用 31 位表示整數的數值,用第 32 位表示整數的符號,0 表示正數,1 表示負數。數值範圍從 2...
ECMAScript 一元運算子
哎呀呀 最近突然想閒一閑 追追劇,想著考研的事,想把前端擱一擱,唉 衝動,全是衝動啊!var o new object o.name delete o.name 物件便變成underfined了 void運算子對任何值返回underfined 沒有返回值得函式真正返回的都是underfined cl...