ECMAScript 等性運算子

2021-05-01 19:27:25 字數 1509 閱讀 1808

判斷兩個變數是否相等是程式設計中非常重要的運算。在處理原始值時,這種運算相當簡單,但涉及物件,任務就稍有點複雜。

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";

var inum = 66;

alert(snum == inum); //輸出 "true"

alert(snum === inum); //輸出 "false"

在這段**中,第乙個 alert 使用等號來比較字串 "66" 和數字 66,輸出 "true"。如前所述,這是因為字串 "66" 將被轉換成數字 66,,然後才與另乙個數字 66 進行比較。第二個 alert 使用全等號在沒有型別轉換的情況下比較字串和數字,當然,字串不等於數字,所以輸出 "false"。

非全等號由感嘆號加兩個等號(!==)表示,只有在無需型別轉換運算數不相等的情況下,才返回 true。

例如:

var snum = "66";

var inum = 66;

alert(snum != inum); //輸出 "false"

alert(snum !== inum); //輸出 "true"

這裡,第乙個 alert 使用非等號,把字串 "66" 轉換成數字 66,使得它與第二個運算數 66 相等。因此,計算結果為 "false",因為兩個運算數是相等的。第二個 alert 使用的非全等號。該運算是在問:"snum" 與 "inum" 不同嗎?這個問題的答案是:是的(true),因為 snum 是字串,而 inum 是數字,它們當然不同。

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...