== vs === in Javascript
本文來自網(wǎng)易云社區(qū)
作者:魏文慶
如果你只想知道==與===的區(qū)別,請(qǐng)直接看總結(jié),當(dāng)然我更希望您能耐心看完全文。
Javascript中用于相等比較的操作符有兩個(gè)==和===。==我們通常稱為“等于”,而===我們通常稱為“嚴(yán)格等于”。本文將對(duì)==和===做詳細(xì)說明。===相對(duì)簡(jiǎn)單,讓我們從===開始。
===
===首先要求比較雙方類型相同, 還要求比較雙方值相等。 如果比較的雙方是都是對(duì)象類型,只有指向同一個(gè)對(duì)象,才能嚴(yán)格相等。關(guān)于javascript的數(shù)據(jù)類型,請(qǐng)參見Javascirpt基本數(shù)據(jù)類型。
本節(jié)示例如下:
==
==在進(jìn)行比較時(shí),如果比較的雙方數(shù)據(jù)類型不同,通常會(huì)先轉(zhuǎn)換成相同的類型再進(jìn)行比較。如果比較的雙方類型相同,這時(shí)與===相同:如果比較的雙方是對(duì)象類型,只有指向同一個(gè)對(duì)象,才能相等;如果是其他類型,比較值是否相等。
比較的雙方類型相同時(shí),可以參考===,比較雙方類型相同的例子,也可作為本節(jié)的例子。下面我們重點(diǎn)討論比較雙方類型不同的情況。
上文中提到比較雙方數(shù)據(jù)類型不同,通常會(huì)先轉(zhuǎn)換成相同的類型,哪些是異常呢?null和undefined。
null和undefined在比較的時(shí)候不會(huì)轉(zhuǎn)換成其他類型。null只和undefined相等。
本節(jié)示例如下:
????//?null和undefined相等null?==?undefined;????//?null/undefined比較時(shí)不會(huì)做隱式類型轉(zhuǎn)換0?!=?null;????"undefined"?!=?undefined;????null?!=?false;我們對(duì)上例中的0!=null進(jìn)行具體分析,如果比較之前進(jìn)行隱式類型轉(zhuǎn)換的話,null轉(zhuǎn)換成Number型的結(jié)果為0, 值是相等的,但因?yàn)閚ull/undefined在比較之前不會(huì)隱式類型轉(zhuǎn)換,所以0!=null。"undefined" != undefined、 null != false 原因類似。
關(guān)于隱式類型轉(zhuǎn)換到指定類型的結(jié)果,其實(shí)等價(jià)于調(diào)用指定類型的構(gòu)造函數(shù), 比如null隱式類型轉(zhuǎn)換成Number型的結(jié)果等于Number(null), undefined轉(zhuǎn)換成String型的結(jié)果等于String("undefined"),詳情請(qǐng)參見javascript類型轉(zhuǎn)換。
比較的雙方數(shù)據(jù)類型不同時(shí),進(jìn)行隱式類型轉(zhuǎn)換時(shí)優(yōu)先轉(zhuǎn)換成Number型。
本節(jié)示例如下:
????//?隱式類型轉(zhuǎn)換優(yōu)先轉(zhuǎn)換成Number型"99"?==?99;?//?"99"轉(zhuǎn)換成Number型為99""?==?0;????//?""轉(zhuǎn)換成Number型為0true?==?1;??//?true轉(zhuǎn)換成Number型為1false?==?"0";????'?\n\n\n'?==?false;上例中false=="0"比較難以理解,無論是"0"轉(zhuǎn)換成Boolean型(結(jié)果為true),還是把false轉(zhuǎn)換成String型(結(jié)果為"false"),值都是不相等的,為什么false=="0"呢?我們只要記住優(yōu)先轉(zhuǎn)換成Number型原則, false轉(zhuǎn)換成Number型,等于 Number(false),等于0, "0"轉(zhuǎn)換成Number型,等于Number("0"), 等于0, 值相等。' \n\n\n' == false類似,Number(' \n\n\n')等于0, Number(false)等于0, 值相等。
比較的雙方數(shù)據(jù)類型不同且有一方是Object類型, 先把Object類型轉(zhuǎn)換成原始類型。我們知道基本只有String/Number/Boolean對(duì)象能轉(zhuǎn)換成有意思的原始類型。我們?cè)诔绦蛑胁煌扑]使用String/Number/Boolean對(duì)象(直接使用原始值), 這部分內(nèi)容就不展開了。
總結(jié)
==和===的異同點(diǎn):
比較雙方都是對(duì)象時(shí),只有指向同一個(gè)對(duì)象才會(huì)相等(包含==/===)。
===要求比較雙方類型相同并且值相等。
==在比較雙方類型不同的時(shí)候通常會(huì)進(jìn)行隱式類型轉(zhuǎn)換。
易于記憶的==比較的原則:
null==undefined, null/undefined不進(jìn)行隱式類型轉(zhuǎn)換。
進(jìn)行隱式類型或轉(zhuǎn)換時(shí),優(yōu)先轉(zhuǎn)換成Number型。
網(wǎng)易云大禮包:https://www.163yun.com/gift
本文來自網(wǎng)易云社區(qū),經(jīng)作者魏文慶授權(quán)發(fā)布。
相關(guān)文章:
【推薦】?3分鐘掌握一個(gè)有數(shù)小技能:回頭客分析
【推薦】?兩分鐘了解Docker的優(yōu)勢(shì)
轉(zhuǎn)載于:https://www.cnblogs.com/163yun/p/9565415.html
總結(jié)
以上是生活随笔為你收集整理的== vs === in Javascript的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: E-Job
- 下一篇: Java 自动装箱与拆箱