== vs === in Javascript

本文來自網易雲社區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對象(直接使用原始值), 這部份內容就不展開了。

總結

==和===的異同點:

  1. 比較雙方都是對象時,只有指向同一個對象纔會相等(包含==/===)。

  2. ===要求比較雙方類型相同而且值相等。

  3. ==在比較雙方類型不一樣的時候一般會進行隱式類型轉換。

易於記憶的==比較的原則:

  1. null==undefined, null/undefined不進行隱式類型轉換。

  2. 進行隱式類型或轉換時,優先轉換成Number型。



網易雲大禮包:https://www.163yun.com/gift

本文來自網易雲社區,經做者魏文慶受權發佈。


相關文章:
【推薦】 3分鐘掌握一個有數小技能:回頭客分析
【推薦】 兩分鐘瞭解Docker的優點

相關文章
相關標籤/搜索