成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端碎碎念 之 [] + {} 和 {} + []一樣嗎?

Soarkey / 1044人閱讀

摘要:前端碎碎念系列會記錄我平時看書或者看文章遇到的問題,一般都是比較基礎(chǔ)但是容易遺忘的知識點,你也可能會在面試中碰到。當(dāng)兩個操作數(shù)都是數(shù)值時,執(zhí)行常規(guī)的數(shù)值加法計算。關(guān)鍵還是要加深對中對數(shù)值轉(zhuǎn)換的理解,以不變應(yīng)萬變。

『前端碎碎念』系列會記錄我平時看書或者看文章遇到的問題,一般都是比較基礎(chǔ)但是容易遺忘的知識點,你也可能會在面試中碰到。 我會查閱一些資料并可能加上自己的理解,來記錄這些問題。更多文章請前往我的個人博客

這道題跟之前提到的[] == ![] 有異曲同工之妙,都是涉及到了隱式的強制類型轉(zhuǎn)換。同樣,我們直接開門見山,總結(jié)下加號操作符的運算規(guī)則。下面規(guī)則判斷權(quán)重由上往下。

當(dāng) 兩個操作數(shù)都是數(shù)值 時,執(zhí)行常規(guī)的數(shù)值加法計算。但有幾個值的考慮

如果有一個操作數(shù)是NaN, 則結(jié)果是NaN;

Infinity 加 Infinity 結(jié)果是 Infinity;

-Infinity 加 -Infinity 結(jié)果是 -Infinity;

Infinity 加 -Infinity 結(jié)果是NaN;

+0 加 +0 結(jié)果是+0;

-0 加 -0 結(jié)果是 -0;

+0 加 -0 結(jié)果是+0;

當(dāng)有 一個操作數(shù)是字符串 時,應(yīng)用如下規(guī)則:

如果兩個操作數(shù)都是字符串,則將兩個字符串拼接起來;

如果只有一個操作符是字符串,則兩另一個操作符轉(zhuǎn)換為字符串(toString),然后再將兩個字符串拼接起來。

前面兩條規(guī)則都非常簡單,不會有混淆。對于其他情況,我總結(jié)了下面兩條規(guī)則:

當(dāng) 有一個操作數(shù)是復(fù)雜數(shù)據(jù)類型(對象,數(shù)組) 時,將兩個操作數(shù)都轉(zhuǎn)換為字符串(ToString)相加。

當(dāng) 有一個操作數(shù)是簡單數(shù)據(jù)類型(true/false, null,undefined) 時,同時不存在復(fù)雜數(shù)據(jù)類型和字符串,則將兩個操作數(shù)都轉(zhuǎn)換成數(shù)值(ToNumber)相加。

另外還有一種特殊情況{} + 頭 的相加式,有些瀏覽器會將{}視為一個塊符號,所以不會參與相加,而是把+符號視為轉(zhuǎn)換符(Number)將后面的操作數(shù)轉(zhuǎn)換為數(shù)值。

注意上面的規(guī)則的權(quán)重是從上到下的,每執(zhí)行一步要從第一條規(guī)則開始再進行判斷。

下面是改規(guī)則的一個判斷流程圖:

我們來看看這幾道題

1.[] + {}

根據(jù)規(guī)則,[] 和 {} 都是復(fù)雜數(shù)據(jù)類型,滿足有一個操作符是復(fù)雜數(shù)據(jù)類型, 所以將兩個值都轉(zhuǎn)換為字符串,調(diào)用其toString方法,得到:

"" + "[object Object]" = "[object Object]"

2.1+{}

同樣滿足第三條規(guī)則,結(jié)果為

"1" + "[object Object]" = "1[object Object]"

3."1" + false

其中false滿足第4條規(guī)則,但同時滿足第2條規(guī)則"1"是字符串,優(yōu)先處理第2條規(guī)則。所以處理結(jié)果應(yīng)該是將false轉(zhuǎn)為字符串

"1" + "false" = "1false"

看看題目中的 {} + []

按規(guī)則計算結(jié)果應(yīng)該是
"[object Object]"

但是控制臺打印出來的結(jié)果卻是0,別忘了第5條,當(dāng){}+開頭的時候,{}并不參與計算,只是被單做一個空的代碼塊,所以{}+[]實際上是+[], 即Number([]) => Number("") => 0

那么{}+{}就是+{},等于Number({}) => Number("[object Object]") => NaN
然而我們看到結(jié)果再次出乎我們的意料,控制臺輸出的是
"[object Object][object Object]"

到底是怎么回事?

原來對于{}+{}
不同瀏覽器會有不同的處理結(jié)果,在chrome中會輸出"[object Object][object Object]",在firefox會輸出NaN。
這應(yīng)該是不同瀏覽器的js引擎解析差異引起的。我們只要記住這個特殊情況就行了。

其實這些特殊值的計算我們平時都很少接觸到,也沒有多大的意義。關(guān)鍵還是要加深對JS中對數(shù)值轉(zhuǎn)換的理解,以不變應(yīng)萬變。到真正遇到問題的時候,不至于摸不著頭腦。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88171.html

相關(guān)文章

  • 前端碎碎 為什么[] == ![] ?

    摘要:判斷步驟如下如果有一個操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值轉(zhuǎn)換為,而轉(zhuǎn)換為。實際上是對比運用上面的順序,是布爾值,所以轉(zhuǎn)化為數(shù)值為。 『前端碎碎念』系列會記錄我平時看書或者看文章遇到的問題,一般都是比較基礎(chǔ)但是容易遺忘的知識點,你也可能會在面試中碰到。 我會查閱一些資料并可能加上自己的理解,來記錄這些問題。更多文章請前往我的個人博客 類似標(biāo)題中的問題還有很多,例如: 為...

    isaced 評論0 收藏0
  • 前端碎碎 nextTick, setTimeout 以及 setImmediate 三者的執(zhí)行

    摘要:更多文章請前往我的個人博客這個問題是有關(guān)執(zhí)行順序和的。其中,整體代碼,可以理解為待執(zhí)行的所有代碼。當(dāng)隊列執(zhí)行完后再執(zhí)行一個任務(wù)。然后再次回到新的事件循環(huán)。所以兩個執(zhí)行完后隊列里只剩下第一個里的。 『前端碎碎念』系列會記錄我平時看書或者看文章遇到的問題,一般都是比較基礎(chǔ)但是容易遺忘的知識點,你也可能會在面試中碰到。 我會查閱一些資料并可能加上自己的理解,來記錄這些問題。更多文章請前往我...

    Cciradih 評論0 收藏0
  • 盒模型的一些碎碎

    摘要:盒模型的簡介本文簡單的總結(jié)了一些基本概念,知識點以及細(xì)節(jié)問題作為前端人員,盒模型是最基礎(chǔ)的知識點,在排版與布局時不可避免與盒模型打交道。 1. 盒模型的簡介 本文簡單的總結(jié)了一些基本概念,知識點以及細(xì)節(jié)問題 作為前端人員,盒模型是最基礎(chǔ)的知識點,在排版與布局時不可避免與盒模型打交道。 在我們編寫HTML時,網(wǎng)頁上的內(nèi)容幾乎都是被包在一個個元素(當(dāng)然也可以叫做標(biāo)簽)中的,最常見的有div...

    王偉廷 評論0 收藏0
  • 關(guān)于C++基礎(chǔ)的一些“碎碎

    摘要:使用命名空間的目的是對標(biāo)識符的名稱進行本地化,以避免命名沖突或名字污染,關(guān)鍵字的出現(xiàn)就是針對這種問題的。缺省參數(shù)概念缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個默認(rèn)值。 ...

    Jackwoo 評論0 收藏0
  • 請求與響應(yīng)

    摘要:請求與響應(yīng)請求的組成的四部分動詞路徑協(xié)議版本要上傳的數(shù)據(jù)關(guān)于以上各部分內(nèi)容的碎碎念請求最多包含四部分,最少包含三部分。 HTTP 請求與響應(yīng) HTTP 請求的組成的四部分: 1 動詞 路徑 協(xié)議/版本2 Key1: value12 Key2: value22 Key3: value32 Content-Type: application/x-www-form-urlencoded2 H...

    BLUE 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<