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