第9題-[1,2,3]map(parseInt)的結果是什麼?

面試題目

[1, 2, 3].map(parseInt) 的結果是什麼?

A. [1.0, 2.0, 3.0]

B. [1, 2, NaN]

C. [1, NaN, NaN]

D. [1, 2, 3]

答案解析:

這一題主要考察mapparseInt兩個函數的用法

函數map

map()方法定義:按照原始數組元素順序依次處理元素,然後返回一個新數組

array.map(function(item,index,array),this)

參數說明:

  • item: 必須,當前處理的數組的值
  • index:可選,當前處理的值得索引
  • array:可選,當前處理的值所屬於的數組對象
  • this:可選。對象作爲該執行回調時使用,傳遞給函數,用作 “this” 的值。如果省略了 thisValue ,“this” 的值爲 “undefined”。

例子:

var numbers=[1,2,3,4,5,6];
numbers.map(function(item,index){
   console.log(item+”-”+index);
})

parseInt()函數的定義用法和參數

parseInt() 函數可解析一個字符串,並返回一個整數。

parseInt(string, radix)
  • string必需。要被解析的字符串。
  • radix 可選。

radix 參數情況比較複雜,具體規則如下:

  1. 表示要解析的數字的基數。該值介於 2 ~ 36 之間。

  2. 如果該參數爲 0,則將以 10 爲基礎來解析string。

  3. 如果該參數小於 2 或者大於 36,則 parseInt() 將返回 NaN。

  4. 如果省略該參數,JavaScript 默認數字的基數如下:

    1. 如果 string 以 “0x” 開頭,parseInt() 會把 string 的其餘部分解析爲十六進制的整數。
    2. 如果字符串 string 以"0"開頭, 基數是8(八進制)或者10(十進制),那麼具體是哪個基數由實現環境決定。ECMAScript 5 規定使用10,但是並不是所有的瀏覽器都遵循這個規定。因此,永遠都要明確給出radix參數的值。
    3. 如果字符串 string 以其它任何值開頭,則基數是10 (十進制)。
  5. 如果第一個字符不能被轉換成數字,parseInt返回NaN。

綜上,題目就可以改寫爲:

[1, 2, 3].map(parseInt) 等價於 [parseInt(1, 0), parseInt(2, 1), parseInt(3, 2)]

parseInt(1, 0)
// radix 爲 0,默認以十進制解析字符串,返回 1
parseInt(2, 1)
// radix 爲 1,不在 2 ~ 36 之間,返回 NaN
parseInt(3, 2)
// radix 爲 2, 字符串卻爲 3,超出二進制的表示範圍,因此要解析的字符串和基數矛盾,返回 NaN

補充示例:

parseInt("10");
parseInt("19",10); // 19 (10+9)
parseInt("11",2); // 3 (2+1)
parseInt("17",8); // 15 (8+7)
parseInt("1f",16); // 31 (16+15)
parseInt("010"); // 10 或 8

掃一掃 關注我的公衆號【前端名獅】,更多精彩內容陪伴你!
【前端名獅】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章