摘要:通常在轉(zhuǎn)換不同數(shù)據(jù)類型時(shí),相等和不相等會(huì)遵循以下規(guī)則若有一個(gè)操作數(shù)是布爾值,則比較前會(huì)將布爾值轉(zhuǎn)換為數(shù)值轉(zhuǎn)為,轉(zhuǎn)為。
本文是 重溫基礎(chǔ) 系列文章的第十八篇。
今日感受:優(yōu)化自己的代碼,也是很愉快的事情。
系列目錄:
【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理)
【重溫基礎(chǔ)】1-14篇
【重溫基礎(chǔ)】15.JS對(duì)象介紹
【重溫基礎(chǔ)】16.JSON對(duì)象介紹
【重溫基礎(chǔ)】17.WebAPI介紹
本章節(jié)復(fù)習(xí)的是JS中的關(guān)于嚴(yán)格相等和非嚴(yán)格相等的一些知識(shí)。
前置知識(shí):
判斷兩個(gè)變量的值是否相等,是編程中非常重要的一個(gè)操作。這里我們心里面先有兩組對(duì)照,思考下:
相等 和 不相等
全等 和 不全等
1.介紹在我們比較字符串、數(shù)值和布爾值的相等性,是比較簡單的,但是到了比較對(duì)象的時(shí)候,問題就比較復(fù)雜。
早期的時(shí)候ECMAScript規(guī)范中,在判斷相等和不相等時(shí),會(huì)先將對(duì)象轉(zhuǎn)換成相似的類型,再執(zhí)行比較。后面有人質(zhì)疑其合理性,最后ECMAScript提出解決方法:提供兩組操作符:
相等和不相等(寬松相等):先轉(zhuǎn)換再比較,使用==
全等和不全等(嚴(yán)格相等):僅比較不轉(zhuǎn)換,使用===
另外還有一類ES6新增的方法:
Object.is (ES6新增)
2.相等和不相等JavaScript中用相等操作符使用==進(jìn)行比較,若兩個(gè)操作數(shù)相等,則返回true,否則返回false。反之,不相等操作符使用!=。
這兩個(gè)操作符都會(huì)先轉(zhuǎn)換操作數(shù)類型,再進(jìn)行比較。
通常在轉(zhuǎn)換不同數(shù)據(jù)類型時(shí),相等和不相等會(huì)遵循以下規(guī)則:
若有一個(gè)操作數(shù)是布爾值,則比較前會(huì)將布爾值轉(zhuǎn)換為數(shù)值:false轉(zhuǎn)為0,true轉(zhuǎn)為1。
若一個(gè)操作數(shù)是字符串,另一個(gè)是數(shù)值,則比較前會(huì)將字符串轉(zhuǎn)換為數(shù)值。
若一個(gè)操作數(shù)是對(duì)象,另一個(gè)不是,則比較前會(huì)調(diào)用valueOf()方法,用返回的基本類型值來判斷。
兩個(gè)操作符進(jìn)行比較時(shí)會(huì)遵循下面規(guī)則:
null和undefined相等。
比較前不能講null和undefined轉(zhuǎn)換成其他值。
若一個(gè)操作數(shù)是NaN,則不相同(==時(shí)返回false,!=時(shí)返回true)。
若兩個(gè)操作數(shù)是NaN,則不相同(==時(shí)返回false,!=時(shí)返回true)。
若兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象。
若兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,則相等操作符返回true,否則返回false。
下面列出一些特殊情況的比較 :
表達(dá)式 | 值 |
---|---|
null == undefined | true |
"NaN" == NaN | false |
9 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"9" == 9 | true |
除了比較前不轉(zhuǎn)換操作數(shù)歪,全等和不全等與相等和不相等并無區(qū)別,但使用的是===,只有當(dāng)不轉(zhuǎn)換的情況下兩個(gè)操作數(shù)相同,才會(huì)返回true。
"99" == 99 ; // true 因?yàn)橄绒D(zhuǎn)換類型 number 和 number "99" === 99 ; // false 因?yàn)椴晦D(zhuǎn)換類型 string 和 number
不全等操作符就相對(duì)應(yīng)的使用!==:
"99" != 99 ; // false 因?yàn)橄绒D(zhuǎn)換類型 number 和 number "99" !== 99 ; // true 因?yàn)椴晦D(zhuǎn)換類型 string 和 number
特殊的:
null == undefined; // true 類似的值 null === undefined; // false 類型不同
由于相等和不相等操作符存在類型轉(zhuǎn)換問題,因此為了保持代碼中數(shù)據(jù)類型的完整性,我們推薦使用去哪等和不全等操作符。
4.同值相等(Object.is)Object.is(value1, value2);,傳入兩個(gè)需要對(duì)比的值。
Object.is() 判斷兩個(gè)值是否相同,并且不會(huì)對(duì)參數(shù)進(jìn)行類型轉(zhuǎn)換。如果下列任何一項(xiàng)成立,則兩個(gè)值相同:
兩個(gè)值都是 undefined
兩個(gè)值都是 null
兩個(gè)值都是 true 或者都是 false
兩個(gè)值是由相同個(gè)數(shù)的字符按照相同的順序組成的字符串
兩個(gè)值指向同一個(gè)對(duì)象
兩個(gè)值都是數(shù)字并且
都是正零 +0
都是負(fù)零 -0
都是 NaN
都是除零和 NaN 外的其它同一個(gè)數(shù)字
Object.is("leo", "leo"); // true Object.is(window, window); // true Object.is("leo", "pingan"); // false Object.is([], []); // false var leo = { a: 1 }; Object.is(leo, leo); // true Object.is(null, null); // true // 特例 Object.is(0, -0); // false Object.is(-0, -0); // true Object.is(NaN, 0/0); // true
另外還有特殊的:
零值相等:
與同值相等類似,不過會(huì)認(rèn)為 +0 與 -0 相等。
5.對(duì)比圖相等操作符對(duì)于不同類型的值,進(jìn)行的比較如下圖所示(來源 MDN):
注意:
ToNumber(A) 表示比較前將參數(shù) A 轉(zhuǎn)換為數(shù)字
ToPrimitive(A)通過嘗試調(diào)用 A 的A.toString() 和 A.valueOf() 方法,將參數(shù) A 轉(zhuǎn)換為原始值(Primitive)。
參考文章:MDN JavaScript 中的相等性判斷
JavaScript高級(jí)程序設(shè)計(jì)
本部分內(nèi)容到這結(jié)束
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推薦 | https://github.com/pingan8787... |
JS小冊(cè) | js.pingan8787.com |
歡迎關(guān)注微信公眾號(hào)【前端自習(xí)課】每天早晨,與您一起學(xué)習(xí)一篇優(yōu)秀的前端技術(shù)博文 .
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/101316.html
摘要:系列目錄復(fù)習(xí)資料資料整理個(gè)人整理重溫基礎(chǔ)篇重溫基礎(chǔ)對(duì)象介紹重溫基礎(chǔ)對(duì)象介紹重溫基礎(chǔ)介紹重溫基礎(chǔ)相等性判斷本章節(jié)復(fù)習(xí)的是中的關(guān)于閉包,這個(gè)小哥哥呀,看看。這里隨著閉包函數(shù)的結(jié)束,執(zhí)行環(huán)境銷毀,變量回收。 本文是 重溫基礎(chǔ) 系列文章的第十九篇。今日感受:將混亂的事情找出之間的聯(lián)系,也是種能力。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】...
摘要:內(nèi)存泄露內(nèi)存泄露概念在計(jì)算機(jī)科學(xué)中,內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。判斷內(nèi)存泄漏,以字段為準(zhǔn)。 本文是 重溫基礎(chǔ) 系列文章的第二十二篇。 今日感受:優(yōu)化學(xué)習(xí)方法。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】1-14篇 【重溫基礎(chǔ)】15.JS對(duì)象介紹 【重溫基礎(chǔ)】16.JSON對(duì)象介紹 【重溫基礎(chǔ)】1...
摘要:歡迎您的支持系列目錄復(fù)習(xí)資料資料整理個(gè)人整理重溫基礎(chǔ)篇重溫基礎(chǔ)對(duì)象介紹重溫基礎(chǔ)對(duì)象介紹重溫基礎(chǔ)介紹重溫基礎(chǔ)相等性判斷重溫基礎(chǔ)閉包重溫基礎(chǔ)事件本章節(jié)復(fù)習(xí)的是中的高階函數(shù),可以提高我們的開發(fā)效率。 本文是 重溫基礎(chǔ) 系列文章的第二十一篇。 今日感受:想家。 本人自己整理的【Cute-JavaScript】資料,包含:【ES6/ES7/ES8/ES9】,【JavaScript基礎(chǔ)...
摘要:系列目錄復(fù)習(xí)資料資料整理個(gè)人整理重溫基礎(chǔ)語法和數(shù)據(jù)類型重溫基礎(chǔ)流程控制和錯(cuò)誤處理重溫基礎(chǔ)循環(huán)和迭代重溫基礎(chǔ)函數(shù)本章節(jié)復(fù)習(xí)的是中的表達(dá)式和運(yùn)算符,用好這些可以大大提高開發(fā)效率。 本文是 重溫基礎(chǔ) 系列文章的第五篇。今日感受:家的意義。 系列目錄: 【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理) 【重溫基礎(chǔ)】1.語法和數(shù)據(jù)類型 【重溫基礎(chǔ)】2.流程控制和錯(cuò)誤處理 【重溫基...
摘要:本文是重溫基礎(chǔ)系列文章的第二十篇。事件捕獲為截獲事件提供機(jī)會(huì),然后實(shí)際的目標(biāo)接收到事件,最后事件冒泡,對(duì)事件作出響應(yīng)。事件處理事件處理,即響應(yīng)某個(gè)事件。包括導(dǎo)致事件的元素事件類型等其他信息。 本文是 重溫基礎(chǔ) 系列文章的第二十篇。 這是第三個(gè)基礎(chǔ)系列的第一篇,歡迎持續(xù)關(guān)注呀! 重溫基礎(chǔ) 系列的【初級(jí)】和【中級(jí)】的文章,已經(jīng)統(tǒng)一整理到我的【Cute-JavaScript】的Java...
閱讀 2471·2021-11-23 09:51
閱讀 531·2019-08-30 13:59
閱讀 1830·2019-08-29 11:20
閱讀 2538·2019-08-26 13:41
閱讀 3246·2019-08-26 12:16
閱讀 735·2019-08-26 10:59
閱讀 3330·2019-08-26 10:14
閱讀 605·2019-08-23 17:21