真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript中“==”和“===”的區(qū)別-創(chuàng)新互聯(lián)

序言

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了裕華免費(fèi)建站歡迎大家使用!

在轉(zhuǎn)換不同的數(shù)據(jù)類(lèi)型時(shí),相等操作符遵循下列基本規(guī)則:

1. 如果有一個(gè)操作數(shù)是布爾值,則在比較相等性之前,將其轉(zhuǎn)換為數(shù)值;

2. 如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,在比較之前先將字符串轉(zhuǎn)換為數(shù)值;

3. 如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的 valueOf() 方法,用得到的基本類(lèi)型值按照前面的規(guī)則進(jìn)行比較;

4. 如果有一個(gè)操作數(shù)是 NaN,無(wú)論另一個(gè)操作數(shù)是什么,相等操作符都返回 false;

5. 如果兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象。如果指向同一個(gè)對(duì)象,則相等操作符返回 true;

6. 在比較相等性之前,不能將 null 和 undefined 轉(zhuǎn)成其他值。

7. null 和 undefined 是相等的。

我們?cè)诰幊痰倪^(guò)程中,經(jīng)常會(huì)遇到判斷兩個(gè)變量是否相等的情況,ECMAscript提供了兩種相等操作符”==”和”===”來(lái)判斷,這兩種操作都會(huì)返回一個(gè)boolean值。一般來(lái)說(shuō),我們把”==”稱(chēng)之為相等,稱(chēng)”===”為全等。

當(dāng)兩相比較的兩個(gè)變量數(shù)據(jù)類(lèi)型一致時(shí),情況比較簡(jiǎn)單,而當(dāng)操作符兩邊的變量類(lèi)型不一致,甚至其中的某個(gè)變量是對(duì)象時(shí),情況就比較復(fù)雜了,下面分別介紹當(dāng)操作數(shù)類(lèi)型不同時(shí)運(yùn)算結(jié)果會(huì)怎么樣。

全等操作符 “===”

全等操作符”===”的情況相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。當(dāng)用全等操作符”===”來(lái)判斷時(shí),首先檢查操作符兩邊操作數(shù)數(shù)據(jù)類(lèi)型是否一致,若不一致,則直接返回false,否則,才進(jìn)行下一步判斷。

如果是兩個(gè)boolean的比較,則”===”兩邊必須同為true或同為false,才可以返回true,否則返回false.若兩相比較的是數(shù)字,那么只有當(dāng)這兩個(gè)數(shù)字大小相等時(shí)才會(huì)返回true,否則返回false。

如果要比較的兩個(gè)變量是字符串,先比較兩個(gè)字符串的長(zhǎng)度length是否相等,如果長(zhǎng)度不一樣,則返回false,如果相等,則從兩個(gè)變量的第一個(gè)字符開(kāi)始比較是否相等,一直比較到最后一位;如果其中的某一位不想等,則返回false,否則返回true。

(注意:字符串的比較是不會(huì)忽略空格的,所以在比較兩個(gè)字符串是否相等時(shí),為確保安全,應(yīng)該先去除空格,然后把兩個(gè)字符串同轉(zhuǎn)為大寫(xiě)或者小寫(xiě)之后再進(jìn)行比較)。

而null只有在null===null的情況下才會(huì)返回true,其它情況都返回false,同樣,undefined只有在undefined===undefined的情況下才會(huì)返回true,否則返回false。如:

true === 1    //false
"1" === 1    //false
 
//boolean的比較
true === true  //true
true === false  //false

//string的比較
"hello" === "helloworrld" //false
"hello" === "world" //false
"hello" === " hello" //false
"hello" === "hellO" //false
"hello" === "hello" //true

//number的比較
1 === 1  //true
1 === 1.0 //true
1 === 1.2 //false

//null和undefined的比較
undefined === undefined  //true
null === null       //true
undefined === null    //false,兩者在"=="時(shí)才返回true

如果進(jìn)行”===”比較的兩個(gè)操作數(shù)不是基本類(lèi)型值,而是兩個(gè)對(duì)象,這時(shí)候判斷依據(jù)就是,判斷這兩個(gè)變量是否是”同一個(gè)”對(duì)象

var a,b,c;
a = b = {
	name : '柳輕侯',
	city : '南京'
};
c = {
	name : '柳輕侯',
	city : '南京'
};
a === b   //true
a === c   //false

兩個(gè)對(duì)象僅僅”長(zhǎng)得一樣”是不夠的,a和c都是Object實(shí)例,且兩者擁有相同的屬性和值,可是這兩個(gè)卻不是”同一個(gè)”對(duì)象,因?yàn)閷?shí)際上a和c指向了兩個(gè)不同的實(shí)例,所以這兩個(gè)對(duì)象是不全等的。

而a和b卻是指向了同一個(gè)對(duì)象,換個(gè)說(shuō)法,a和b是同一個(gè)對(duì)象的不同別名,他們實(shí)際上指向的對(duì)象是完全相同的,所以a === b?!?==” 與 “===” 比較規(guī)則一樣,在此不再贅述。

相等操作符”==”

全等操作符在進(jìn)行判斷的時(shí)候,如果兩個(gè)變量的類(lèi)型不同,則直接返回false,而與此不同,”==”相等操作符在判斷的時(shí)候,如果兩個(gè)變量的類(lèi)型不同,則會(huì)做一個(gè)隱式的類(lèi)型轉(zhuǎn)換,把要比較的兩個(gè)值轉(zhuǎn)化為相同的類(lèi)型再做比較,那么這種轉(zhuǎn)化規(guī)則是怎么樣的?

在轉(zhuǎn)化不同數(shù)據(jù)類(lèi)型時(shí),相等和不等操作符遵循下面的基本規(guī)則

  • 如果其中一個(gè)操作數(shù)是是boolean值,則在比較之前會(huì)先將boolean值轉(zhuǎn)化為number值,true轉(zhuǎn)化為1,false轉(zhuǎn)為0;
  • 如果其中一個(gè)操作數(shù)是string類(lèi)型,而另一個(gè)是number類(lèi)型,則在比較之前先將string類(lèi)型轉(zhuǎn)化為number類(lèi)型再進(jìn)行判斷;
  • 在比較之前,undefined和null是不會(huì)轉(zhuǎn)為其他值進(jìn)行比較的;
  • 如果其中一個(gè)操作數(shù)是對(duì)象,而另一個(gè)是基本類(lèi)型值,則在比較之前先將對(duì)象轉(zhuǎn)為基本類(lèi)型值,然后再依據(jù)前面的規(guī)則進(jìn)行后續(xù)的比較;

兩個(gè)操作數(shù)在比較時(shí)遵循下列規(guī)則

  • undefined和null是相等的,即:undefined == null;
  • 如果有一個(gè)操作數(shù)是NaN,那么返回false,即使兩個(gè)操作數(shù)都是NaN,也會(huì)返回false;
  • 如果兩個(gè)操作數(shù)是對(duì)象,則比較規(guī)則跟”===”的比較規(guī)則是一樣的,除非這兩個(gè)操作數(shù)是同一個(gè)對(duì)象,則返回true,否則返回false;

此處需要注意的是,NaN == NaN是返回false的,NaN意思是 not a number,也就是說(shuō)該操作數(shù)是一個(gè)非數(shù)字,這個(gè)非數(shù)字是不確定的,它的值是未知的,甚至可能根本就不能用javascript的語(yǔ)法表示出來(lái),這樣一個(gè)未知量是不能用來(lái)進(jìn)行特定比較的,兩個(gè)未知的東西,如果不能確定它的值是什么,當(dāng)然不能說(shuō) NaN == NaN。

那么既然不能用”==”來(lái)比較,我們?cè)趺慈ヅ卸ㄒ粋€(gè)變量是不是NaN呢 ,既然不能用相等來(lái)判定,那么不妨反其道而行之,用”!=”來(lái)判定,判定一個(gè)變量是否不等于NaN。比如:

//如果需要判定一個(gè)變量是不是NaN,可以如下
//a是你需要判定的變量
if((typeof a === "number") && a != NaN ){  //此處需要注意,NaN也是number類(lèi)型
	//TODO 
}

常見(jiàn)比較情況及其結(jié)果

null == undefined  // true 
"NaN" == NaN    // false 
5 == NaN      // false 
NaN == NaN     // false 
NaN != NaN     // true 
false == 0     // true 
true == 1      // true 
true == 2      // false 
undefined == 0   // false 
null == 0      // false
"5" == 5      // true

典型例題解析

![] == [] //true

這是一道比較容易令人困惑的題,按照正常的思維模式,對(duì)一個(gè)操作數(shù)邏輯取反,跟這個(gè)操作數(shù)本身的值是相對(duì)的,如果這個(gè)操作數(shù)本身的值是true,那么取反之后就是false,反之,如果這個(gè)操作數(shù)的值是false,那么對(duì)其邏輯取反之后就是true,無(wú)論如何也不會(huì)是同一個(gè)值,可是事實(shí)上卻是![] == []。

首先,![]的值是false,因?yàn)檫@里[]被當(dāng)成了一個(gè)數(shù)組的實(shí)例,是一個(gè)對(duì)象,而對(duì)象都是真值,對(duì)其取反,得到一個(gè)假值,也就是false。

其次看等號(hào)右邊,[]是一個(gè)對(duì)象,要將其轉(zhuǎn)為基本類(lèi)型值,會(huì)先調(diào)用數(shù)組的valueOf方法,而數(shù)組的valueOf方法返回?cái)?shù)組本身,沒(méi)有得到一個(gè)基本值。

這時(shí)候要繼續(xù)調(diào)用數(shù)組的toString方法,得到一個(gè)””空字符串,所以這時(shí)候也就變成了false == “”是否為真的問(wèn)題了,而根據(jù)前面的規(guī)則,如果有一個(gè)操作數(shù)為boolean值,會(huì)將其轉(zhuǎn)為數(shù)值,false轉(zhuǎn)化為0。

進(jìn)而,問(wèn)題轉(zhuǎn)化為0 == “”是否為真值的問(wèn)題,當(dāng)number和string比較時(shí),會(huì)將string轉(zhuǎn)為number,而””會(huì)轉(zhuǎn)為0。最后,問(wèn)題變演化成了0 == 0是否為真值,毋庸置疑,結(jié)果是true。

這里要注意的就是![],它被當(dāng)成了一個(gè)整體的邏輯值,是直接對(duì)對(duì)象進(jìn)行取反,是一個(gè)假值,而不是先把[]轉(zhuǎn)化為基本值再取反

小結(jié)

“==”在比較不同類(lèi)型值得時(shí)候會(huì)進(jìn)行隱式的類(lèi)型轉(zhuǎn)化,而”===”不會(huì)轉(zhuǎn)化,全等一定相等,相等卻不一定全等,這是一個(gè)充分不必要條件。

undefined和null相等而不全等,且在相等比較的時(shí)候不會(huì)轉(zhuǎn)化為其他類(lèi)型的值。NaN是不等于NaN 的,要判斷某個(gè)變量是不是NaN,要用”!=”。對(duì)象和非對(duì)象在進(jìn)行比較的時(shí)候會(huì)先轉(zhuǎn)為基本類(lèi)型值然后再根據(jù)上面的規(guī)則進(jìn)行比較。

以上就是淺談javascript中相等操作符:==與===的區(qū)別的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


本文名稱(chēng):javascript中“==”和“===”的區(qū)別-創(chuàng)新互聯(lián)
分享地址:http://weahome.cn/article/diojjp.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部