1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        大廠就是吊,這面試題把我整懵了

        共 2729字,需瀏覽 6分鐘

         ·

        2021-03-10 10:19

        大廠就是吊,這面試題把我整懵了

        題目如下:

        ['1''2''3'].map(parseInt)

        然后讓你說出返回值,以及為什么?

        不得不說,大廠就是吊啊,是大廠真會造火箭,還是我們的基礎(chǔ)不太好,明顯是第二種嘛?一般人都會回答 ['1', '2', '3']

        大佬們是不會回答 ['1', '2', '3'],而是回答 [1, NaN, NaN]。

        這就把我給整懵逼了,就這還能難得到我,誒,還真把我難倒了。

        接下來我們就來好好解析一下為什么?

        解析之前,我們得想想面試官到底想問什么?

        我猜想有以下幾個可能

        • map 方法
        • parseInt 方法

        map 方法解析

        ['1''2''3'].map(function(item){
          console.log(item)
        })

        你以為他會只打印 1,2,3。其實不是,來看看瀏覽器控制臺是怎么打印的:

        1
        2
        3
        (3)[undefinedundefinedundefined]

        神了,還打印出四個值來,其實最后一個是返回值,就是因為function(item){} 沒有真正的返回值,默認(rèn)返回undefined

        所以 map 之后返回一個三個 undefined 元素的數(shù)組

        [undefinedundefinedundefined]

        其實上面我們可以這樣寫,就更加清楚了

        var a = ['1''2''3'].map((item) => console.log(item))
        console.log(a)

        其實打印出來就是:

        [undefinedundefinedundefined]

        繼續(xù)深入研究:

        ['1''2''3'].map(function(item, index){
          // item: 數(shù)組元素
          // index: 數(shù)組元素的下標(biāo)
          console.log(item, index)
        })

        會打印出:

        item, index
        1      0
        2      1
        3      2

        繼續(xù)深入研究:

        ['1''2''3'].map(function(item, index, array){
          console.log("item", item)
          console.log("index", index)
          console.log("array", array)
        })

        會打印出:

        item 1
        index 0
        array (3) ["1""2""3"]
        item 2
        index 1
        array (3) ["1""2""3"]
        item 3
        index 2
        array (3) ["1""2""3"]

        這里有個經(jīng)常面試的考點就是考 map 與 forEach 的核心區(qū)別:

        1. map 會重新返回數(shù)組
        2. forEach 不會重新返回數(shù)組

        ok

        parseInt

        記住核心的一點就是其實 parseInt(string, radix)   解析一個字符串并返回指定基數(shù)的十進(jìn)制整數(shù), radix 是2-36之間的整數(shù),表示被解析字符串的基數(shù)。

        parseInt 其實是有兩個參數(shù)的,只是如果我們平時不注意的話,會以為只有一個參數(shù),所以回答 ['1', '2', '3'] 可能就以為只有一個參數(shù),而且會認(rèn)為默認(rèn)就是 10 進(jìn)制的。

        實際上面那道題目可以轉(zhuǎn)化為:

        ['1''2''3'].map(parseInt(item, index))

        是不是這樣的呢?是的,就是這樣的,他會把數(shù)組元素當(dāng)做 parseInt 第一個參數(shù),將數(shù)組元素的下標(biāo)當(dāng)做 parseInt 第二個參數(shù)

        那么為什么是 [1, NaNa, NaN] 呢?

        其實就是執(zhí)行了三遍:

        parseInt("1"0// 0
        parseInt('2'1// NaN
        parseInt('3'2// NaN

        第一個元素是 1,是問啥。

        如果 radix 是 undefined、0或未指定的,JavaScript會假定以下情況:

        • 如果輸入的 string以 "0x"或 "0x"(一個0,后面是小寫或大寫的X)開頭,那么radix被假定為16,字符串的其余部分被當(dāng)做十六進(jìn)制數(shù)去解析。

        • 如果輸入的 string以 "0"(0)開頭, radix被假定為8(八進(jìn)制)或10(十進(jìn)制)。具體選擇哪一個radix取決于實現(xiàn)。ECMAScript 5 澄清了應(yīng)該使用 10 (十進(jìn)制),但不是所有的瀏覽器都支持。因此,在使用 parseInt 時,一定要指定一個 radix。

        • 如果輸入的 string 以任何其他值開頭, radix 是 10 (十進(jìn)制)。

        • 如果第一個字符不能轉(zhuǎn)換為數(shù)字,parseInt會返回 NaN。

        那么第二個元素是 NaN,很納悶。

        你想想看:

        radix 可選

        從 2 到 36,表示字符串的基數(shù)。例如指定 16 表示被解析值是十六進(jìn)制數(shù)。請注意,10不是默認(rèn)值!

        沒有 1進(jìn)制轉(zhuǎn)換,所以是 NaN。

        第三個元素是 NaN 又是為啥呢?

        parseInt('3'2// NaN

        因為 2 進(jìn)制轉(zhuǎn)換,只有 0 和 1,2進(jìn)制沒法表示 3

        所以打印出來就是 NaN


        瀏覽 32
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产女人操逼 | BBB操BBB | 日逼日逼 | ass中国裸体pics | 激情丁香五月婷婷 | 欧美性猛交XXXXX乱大交3免费 | 小黄片视频免费看 | 极品最强网红八月未央 | 插逼网页 | 麻豆91蜜桃传媒在线观看 |