JavaScript相等與比較

來源:互聯網
上載者:User

相等與比較
JavaScript 有兩種方式判斷兩個值是否相等。
等於操作符
等於操作符由兩個等號組成:==

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 中的指標比較。
結論
強烈推薦使用嚴格等於操作符。如果類型需要轉換,應該在比較之前顯式的轉換,
而不是使用語言本身複雜的強制轉換規則。
 



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.