等於操作符
嚴格等於操作符
比較對象
等於運算子由兩個等號組成:==
"" == "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)!