== vs === in Javascript
本文來自網易云社區
作者:魏文慶
如果你只想知道==與===的區別,請直接看總結,當然我更希望您能耐心看完全文。
Javascript中用于相等比較的操作符有兩個==和===。==我們通常稱為“等于”,而===我們通常稱為“嚴格等于”。本文將對==和===做詳細說明。===相對簡單,讓我們從===開始。
===
===首先要求比較雙方類型相同, 還要求比較雙方值相等。 如果比較的雙方是都是對象類型,只有指向同一個對象,才能嚴格相等。關于javascript的數據類型,請參見Javascirpt基本數據類型。
本節示例如下:
==
==在進行比較時,如果比較的雙方數據類型不同,通常會先轉換成相同的類型再進行比較。如果比較的雙方類型相同,這時與===相同:如果比較的雙方是對象類型,只有指向同一個對象,才能相等;如果是其他類型,比較值是否相等。
比較的雙方類型相同時,可以參考===,比較雙方類型相同的例子,也可作為本節的例子。下面我們重點討論比較雙方類型不同的情況。
上文中提到比較雙方數據類型不同,通常會先轉換成相同的類型,哪些是異常呢?null和undefined。
null和undefined在比較的時候不會轉換成其他類型。null只和undefined相等。
本節示例如下:
????//?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 原因類似。
關于隱式類型轉換到指定類型的結果,其實等價于調用指定類型的構造函數, 比如null隱式類型轉換成Number型的結果等于Number(null), undefined轉換成String型的結果等于String("undefined"),詳情請參見javascript類型轉換。
比較的雙方數據類型不同時,進行隱式類型轉換時優先轉換成Number型。
本節示例如下:
????//?隱式類型轉換優先轉換成Number型"99"?==?99;?//?"99"轉換成Number型為99""?==?0;????//?""轉換成Number型為0true?==?1;??//?true轉換成Number型為1false?==?"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的優勢
轉載于:https://www.cnblogs.com/163yun/p/9565415.html
總結
以上是生活随笔為你收集整理的== vs === in Javascript的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: E-Job
- 下一篇: Java 自动装箱与拆箱