parseInt()方法理解

parseInt()方法理解

通過下面幾個題來深刻理解一下parseInt方法:

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

['1', '2', '3'].filter(parseInt)

['1', '2', '3'].reduce(parseInt)

'1 2 3'.replace(/\d/g, parseInt)

['1', '2', '3'].map(parseFloat)

parseInt(string, radix)方法用於解析字符串,並返回一個整數。

  • 接收兩個參數:stringradixstring爲需要解析的字符串,radix爲進制數,也就是將字符串按照幾進制進行解析,當radix爲2,表示將字符串按照二進制解析,依次類推;
  • radix是可選參數,取值範圍爲2 ~ 36
  • radix爲0或者不存在時,js會按照如下規則對字符串進行解析:<1>、當字符串以1-9開頭時,會按照十進制解析;<2>、當字符串以0x開頭時,會按照十六進制進行解析;<3>、當字符串以0開頭時,會按照八進制或十六進制解析;

上述題目解析:

['1', '2', '3'].map(parseInt)
// map方法接收一個函數作爲參數,數組中的每個元素都會執行傳入的函數,數組中的元素及對應的索引會作爲函數的參數
// 執行過程:
parseInt('1', 0) // 1
parseInt('2', 1) // NaN
parseInt('3', 2) // NaN
['1', '2', '3'].filter(parseInt)
// filter方法接收一個函數作爲參數,數組中每個元素都會執行傳入的函數,它會將所有元素在函數執行後結果爲true的返回值重新組成一個新數組返回。
parseInt('1', 0) // 1
parseInt('2', 1) // NaN
parseInt('3', 2) // NaN
// Boolean(NaN)爲false,最終返回的新數組爲[1]
['1', '2', '3'].reduce(parseInt)
// reduce(function(accumulator, currentVal, currentValIndex, array){}, initVal)
// 上面是reduce的用法,從上面可以看出reduce方法有兩個參數,第一個參數是函數,我們稱它爲累積器;第二個參數爲初始值,是個可選參數,當沒有傳時,取數組的第一個元素;
// 數組中的每個元素都會執行累積器函數,該函數有四個參數,第一個參數是上一個元素執行後的返回值,第二個參數爲當前元素的值,第三個參數爲當前元素的索引,第四個參數爲整個數組值;
// 下面就是上述執行過程:初始值爲空,所以第一輪時:accumulator是‘1’,currentVal是'2',第二輪時,accumulator是上一輪返回值1,currentVal是'3',最終返回1;
parseInt('1', '2') // 1
parseInt(1, '3') // 1
// 最終返回值爲1
'1 2 3'.replace(/\d/g, parseInt)
// replace()方法第二個參數可以接收一個函數,會傳三個參數,第一個參數是匹配規則匹配到的值,第二個參數是匹配到的值在字符串中的位置,第三個參數爲字符串本身;
parseInt('1', 0) // 1
parseInt('2', 2) // NaN
parseInt('3', 4) // 3
// 最後返回'1 NaN 3'
['1', '2', '3'].map(parseFloat)
// parseFloat方法用於解析字符串並返回一個浮點數,當字符串以數字開頭時,parseFloat會從頭解析到非數字地方停止,以數值的形式返回解析的數字;如果字符串開頭非數字,則返回NaN;
parseFloat('1') //1
parseFloat('2') // 2
parseFloat('3') // 3
// 最後返回[1, 2, 3]
參考文獻:

[1] 一道網紅面試題(騰訊、百度面試中都出現過)
[2] Array.prototype.reduce()
[3] replace()

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