本文來自網易雲社區javascript
做者:魏文慶
html
若是你只想知道==與===的區別,請直接看總結,固然我更但願您能耐心看徹底文。
Javascript中用於相等比較的操做符有兩個==和===。==咱們一般稱爲「等於」,而===咱們一般稱爲「嚴格等於」。本文將對==和===作詳細說明。===相對簡單,讓咱們從===開始。java
===首先要求比較雙方類型相同, 還要求比較雙方值相等。 若是比較的雙方是都是對象類型,只有指向同一個對象,才能嚴格相等。關於javascript的數據類型,請參見Javascirpt基本數據類型。
本節示例以下:函數
// 類型相同,值相同,才嚴格相等 1 === 1; "jerry" === "jerry"; true === true; null === null; undefined === undefined; // 類型相同且爲對象類型,必須是指向同一個的對象才嚴格相等 {name:"jerry"} !== {name: "jerry"} // 兩個不一樣的{name:"jerry"}對象 var a = {name:"jerry"}; var b = a; a === b; // 指向同一個對象 // 類型不一樣,不嚴格相等 null !== undefined; false !== 0; 1 !== "1";
==在進行比較時,若是比較的雙方數據類型不一樣,一般會先轉換成相同的類型再進行比較。若是比較的雙方類型相同,這時與===相同:若是比較的雙方是對象類型,只有指向同一個對象,才能相等;若是是其餘類型,比較值是否相等。
比較的雙方類型相同時,能夠參考===,比較雙方類型相同的例子,也可做爲本節的例子。下面咱們重點討論比較雙方類型不一樣的狀況。
上文中提到比較雙方數據類型不一樣,一般會先轉換成相同的類型,哪些是異常呢?null和undefined。.net
null和undefined在比較的時候不會轉換成其餘類型。null只和undefined相等。htm
本節示例以下:對象
// null和undefined相等 null == undefined; // null/undefined比較時不會作隱式類型轉換 0 != null; "undefined" != undefined; null != false;
咱們對上例中的0!=null進行具體分析,若是比較以前進行隱式類型轉換的話,null轉換成Number型的結果爲0, 值是相等的,但由於null/undefined在比較以前不會隱式類型轉換,因此0!=null。"undefined" != undefined、 null != false 緣由相似。
blog
關於隱式類型轉換到指定類型的結果,其實等價於調用指定類型的構造函數, 好比null隱式類型轉換成Number型的結果等於Number(null), undefined轉換成String型的結果等於String("undefined"),詳情請參見javascript類型轉換。
ip
比較的雙方數據類型不一樣時,進行隱式類型轉換時優先轉換成Number型。ci
本節示例以下:
// 隱式類型轉換優先轉換成Number型 "99" == 99; // "99"轉換成Number型爲99 "" == 0; // ""轉換成Number型爲0 true == 1; // true轉換成Number型爲1 false == "0"; ' \n\n\n' == false;
上例中false=="0"比較難以理解,不管是"0"轉換成Boolean型(結果爲true),仍是把false轉換成String型(結果爲"false"),值都是不相等的,爲何false=="0"呢?咱們只要記住優先轉換成Number型原則, false轉換成Number型,等於 Number(false),等於0, "0"轉換成Number型,等於Number("0"), 等於0, 值相等。' \n\n\n' == false相似,Number(' \n\n\n')等於0, Number(false)等於0, 值相等。
比較的雙方數據類型不一樣且有一方是Object類型, 先把Object類型轉換成原始類型。咱們知道基本只有String/Number/Boolean對象能轉換成有意思的原始類型。咱們在程序中不推薦使用String/Number/Boolean對象(直接使用原始值), 這部份內容就不展開了。
==和===的異同點:
比較雙方都是對象時,只有指向同一個對象纔會相等(包含==/===)。
===要求比較雙方類型相同而且值相等。
==在比較雙方類型不一樣的時候一般會進行隱式類型轉換。
易於記憶的==比較的原則:
null==undefined, null/undefined不進行隱式類型轉換。
進行隱式類型或轉換時,優先轉換成Number型。
網易雲大禮包:https://www.163yun.com/gift
本文來自網易雲社區,經做者魏文慶受權發佈。
相關文章:
【推薦】 3分鐘掌握一個有數小技能:回頭客分析
【推薦】 兩分鐘瞭解Docker的優點