Javascript 中 == 和 === 的區別

來源:互聯網
上載者:User

標籤:ref   str   資料   布爾   rip   比較   strong   asc   pre   

"==="叫做嚴格運算子,"=="叫做相等運算子。

嚴格運算子的運算規則如下,

(1)不同類型值

如果兩個值的類型不同,直接返回false。

(2)同一類的原始類型值

同一類型的原始類型的值(數值、字串、布爾值)比較時,值相同就返回true,值不同就返回false。

(3)同一類的複合類型值

兩個複合類型(對象、數組、函數)的資料比較時,不是比較它們的值是否相等,而是比較它們是否指向同一個對象。

(4)undefined和null

undefined 和 null 與自身嚴格相等。

null === null  //trueundefined === undefined  //true

相等運算子在比較相同類型的資料時,與嚴格相等運算子完全一樣。

在比較不同類型的資料時,相等運算子會先將資料進行類型轉換,然後再用嚴格相等運算子比較。類型轉換規則如下:

(1)原始類型的值

原始類型的資料會轉換成數實值型別再進行比較。

字串和布爾值都會轉換成數值。

(2)對象與原始類型值比較

對象(這裡指廣義的對象,包括數值和函數)與原始類型的值比較時,對象轉化成原始類型的值,再進行比較。

(3)undefined和null

undefined和null與其他類型的值比較時,結果都為false,它們互相比較時結果為true。

(4)相等運算子的缺點

相等運算子隱藏的類型轉換,會帶來一些違反直覺的結果。

‘‘ == ‘0‘           // false0 == ‘‘             // true0 == ‘0‘            // truefalse == ‘false‘    // falsefalse == ‘0‘        // truefalse == undefined  // falsefalse == null       // falsenull == undefined   // true‘ \t\r\n ‘ == 0     // true

這就是為什麼建議盡量不要使用相等運算子。

至於使用相等運算子會不會對後續代碼造成意外影響,答案是有可能會。

var a = undefined;if(!a){    console.log("1"); //1}var a = undefined;if(a == null){    console.log("1"); //1}var a = undefined;if(a === null){    console.log("1"); //無輸出}

也就是說當a為undefined時,輸出的值會有變化,而在編程中對象變成undefined實在是太常見了。

 原文連結 http://www.cnblogs.com/DanBrown/p/8960989.html

Javascript 中 == 和 === 的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.