首頁 >web前端 >js教程 >JavaScript進階系列—型別中的相等與比較

JavaScript進階系列—型別中的相等與比較

黄舟
黄舟原創
2017-02-08 09:50:291428瀏覽
  • 等於操作符

  • 嚴格等於操作符

  • 比較對象

  • 等於運算子

等於運算子由兩個等號組成:==

JavaScript 是弱型別語言,這表示,等於運算子會為了比較兩個值而進行強制型別型轉換。

""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true

上面的表格展示了強制類型轉換,這也是使用 == 被廣泛認為是不好編程習慣的主要原因, 由於它的複雜轉換規則,會導致難以跟踪的問題。

此外,強制類型轉換也會帶來效能消耗,例如一個字串為了和一個數字進行比較,必須事先被強制轉換為數字。

嚴格等於操作符

嚴格等於操作符由三個等號組成:===

不像普通的等於操作符,嚴格等於操作符不會進行強制類型轉換。

""           ===   "0"           // false
0            ===   ""            // false
0            ===   "0"           // false
false        ===   "false"       // false
false        ===   "0"           // false
false        ===   undefined     // false
false        ===   null          // false
null         ===   undefined     // false
" \t\r\n"    ===   0             // false

上面的結果更加清晰並有利於程式碼的分析。如果兩個操作數類型不同就肯定不相等也有助於效能的提升。

比較物件

雖然 == 和 === 運算子都是等於運算符,但是當其中有一個運算元為物件時,行為就不同了。

{} === {};                   // false
new String('foo') === 'foo'; // false
new Number(10) === 10;       // false
var foo = {};
foo === foo;                 // true

這裡等於操作符比較的不是值是否相等,而是是否屬於同一個身分;也就是說,只有物件的同一個實例才被認為是相等的。 這有點像 Python 中的 is 和 C 中的指標比較。

注意:為了更直觀的看到==和===的區別,可以參見JavaScript Equality Table


結論

強烈建議使用嚴格等於操作符。如果類型需要轉換,應該在比較之前明確的轉換, 而不是使用語言本身複雜的強制轉換規則。

以上就是JavaScript進階系列—類型中的相等與比較的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn