摘要:判斷步驟如下如果有一個(gè)操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值轉(zhuǎn)換為,而轉(zhuǎn)換為。實(shí)際上是對(duì)比運(yùn)用上面的順序,是布爾值,所以轉(zhuǎn)化為數(shù)值為。
『前端碎碎念』系列會(huì)記錄我平時(shí)看書或者看文章遇到的問(wèn)題,一般都是比較基礎(chǔ)但是容易遺忘的知識(shí)點(diǎn),你也可能會(huì)在面試中碰到。 我會(huì)查閱一些資料并可能加上自己的理解,來(lái)記錄這些問(wèn)題。更多文章請(qǐng)前往我的個(gè)人博客
類似標(biāo)題中的問(wèn)題還有很多,例如:
為什么 [ ] == false 而 !![ ] == true ?
or
[1] == [1] 是true 還是 false?
如果對(duì) == 操作符一知半解,就很難解答類似的問(wèn)題。我們直接開門見山,看看==是如何工作的,這里的難點(diǎn)主要涉及到j(luò)s中的隱式強(qiáng)制類型轉(zhuǎn)換。
判斷步驟如下:
如果有一個(gè)操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值----false轉(zhuǎn)換為0,而true轉(zhuǎn)換為1。
如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值。
如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的valueOf()方法,如果得到的值不是基本類型值,則基于返回值再調(diào)用toString方法(這個(gè)過(guò)程即ToPrimitive),用得到的基本類型值按照前面的規(guī)則進(jìn)行比較。
如果兩個(gè)操作數(shù)都是對(duì)象,則比較他們是不是同一個(gè)對(duì)象。如果兩個(gè)操作數(shù)指向同一個(gè)對(duì)象,則相等操作符返回true, 否則返回false。
這兩個(gè)操作符在進(jìn)行比較時(shí)則要遵循下列規(guī)則。
null 和 undefined 是相等的。
要比較相等性之前,不能將null和undefined轉(zhuǎn)換成其他任何值
如果有一個(gè)操作數(shù)是NaN,則相等操作符返回false, 而不相等操作符則返回true, NaN != NaN
我畫了一個(gè)圖來(lái)表示這個(gè)過(guò)程:
根據(jù)上面的步驟,來(lái)分析[] == ![] 為什么會(huì)返回true
[] == ![]
!運(yùn)算符的優(yōu)先級(jí)大于 ==,所以實(shí)際上這里還涉及到!的運(yùn)算。
這個(gè)比較簡(jiǎn)單!會(huì)將后面的值轉(zhuǎn)化為布爾值。即![]變成!Boolean([]), 也就是!true,也就是false。
實(shí)際上是對(duì)比 [] == false;
運(yùn)用上面的順序,false是布爾值,所以轉(zhuǎn)化為數(shù)值Number(flase), 為0。
對(duì)比[] == 0;
滿足第三條規(guī)則[] 是對(duì)象(數(shù)組也屬于對(duì)象),0不是對(duì)象。所以ToPrimitive([])是""
對(duì)比"" == 0;
滿足第二條規(guī)則,"" 是字符串,0是數(shù)值,對(duì)比Number("") == 0, 也就是 0 == 0。
所以得出 [] == ![]
我們可以用同樣的方法對(duì)上面提到的兩個(gè)等式例子進(jìn)行判斷,都能得出結(jié)論。雖然過(guò)程有點(diǎn)麻煩,但是本質(zhì)上就是將兩邊的比較值轉(zhuǎn)化為數(shù)值進(jìn)行比較。讀者可以自行嘗試實(shí)踐。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/81954.html
摘要:前端碎碎念系列會(huì)記錄我平時(shí)看書或者看文章遇到的問(wèn)題,一般都是比較基礎(chǔ)但是容易遺忘的知識(shí)點(diǎn),你也可能會(huì)在面試中碰到。當(dāng)兩個(gè)操作數(shù)都是數(shù)值時(shí),執(zhí)行常規(guī)的數(shù)值加法計(jì)算。關(guān)鍵還是要加深對(duì)中對(duì)數(shù)值轉(zhuǎn)換的理解,以不變應(yīng)萬(wàn)變。 『前端碎碎念』系列會(huì)記錄我平時(shí)看書或者看文章遇到的問(wèn)題,一般都是比較基礎(chǔ)但是容易遺忘的知識(shí)點(diǎn),你也可能會(huì)在面試中碰到。 我會(huì)查閱一些資料并可能加上自己的理解,來(lái)記錄這些問(wèn)題...
摘要:更多文章請(qǐng)前往我的個(gè)人博客這個(gè)問(wèn)題是有關(guān)執(zhí)行順序和的。其中,整體代碼,可以理解為待執(zhí)行的所有代碼。當(dāng)隊(duì)列執(zhí)行完后再執(zhí)行一個(gè)任務(wù)。然后再次回到新的事件循環(huán)。所以兩個(gè)執(zhí)行完后隊(duì)列里只剩下第一個(gè)里的。 『前端碎碎念』系列會(huì)記錄我平時(shí)看書或者看文章遇到的問(wèn)題,一般都是比較基礎(chǔ)但是容易遺忘的知識(shí)點(diǎn),你也可能會(huì)在面試中碰到。 我會(huì)查閱一些資料并可能加上自己的理解,來(lái)記錄這些問(wèn)題。更多文章請(qǐng)前往我...
摘要:盒模型的簡(jiǎn)介本文簡(jiǎn)單的總結(jié)了一些基本概念,知識(shí)點(diǎn)以及細(xì)節(jié)問(wèn)題作為前端人員,盒模型是最基礎(chǔ)的知識(shí)點(diǎn),在排版與布局時(shí)不可避免與盒模型打交道。 1. 盒模型的簡(jiǎn)介 本文簡(jiǎn)單的總結(jié)了一些基本概念,知識(shí)點(diǎn)以及細(xì)節(jié)問(wèn)題 作為前端人員,盒模型是最基礎(chǔ)的知識(shí)點(diǎn),在排版與布局時(shí)不可避免與盒模型打交道。 在我們編寫HTML時(shí),網(wǎng)頁(yè)上的內(nèi)容幾乎都是被包在一個(gè)個(gè)元素(當(dāng)然也可以叫做標(biāo)簽)中的,最常見的有div...
摘要:在美國(guó)和一些其他發(fā)達(dá)國(guó)家,程序員已經(jīng)從一個(gè)相對(duì)高端的行業(yè)變成越來(lái)越多普通人的日常。是五十個(gè)編輯推薦話題之一軟件開發(fā)者是美國(guó)四個(gè)州最常見的職業(yè)圖片來(lái)源我們不難設(shè)想,把軟件開發(fā)的工作自動(dòng)化掉,對(duì)相關(guān)企業(yè)來(lái)說(shuō)將會(huì)是一個(gè)多么巨大的誘惑。 在美國(guó)和一些其他發(fā)達(dá)國(guó)家,程序員已經(jīng)從一個(gè)相對(duì)高端的行業(yè)變成越來(lái)越多普通人的日常。 JavaScript 是 Medium 五十個(gè)編輯推薦話題之一: http...
閱讀 1176·2021-11-22 15:22
閱讀 3850·2021-10-19 13:13
閱讀 3599·2021-10-08 10:05
閱讀 3306·2021-09-26 10:20
閱讀 2995·2019-08-29 14:21
閱讀 2204·2019-08-27 10:55
閱讀 1880·2019-08-26 10:31
閱讀 2590·2019-08-23 16:47