js中的map parseInt 問題

2021-08-30 13:33:43 字數 1439 閱讀 7053

廖雪峰老師的js中有這樣乙個例子:小明希望利用map()把字串變成整數,他寫的**很簡潔:

'use strict';

var arr = ['1', '2', '3'];

var r;

r = arr.map(parseint);

console.log(r);

結果竟然是1, nan, nan,小明百思不得其解,請幫他找到原因並修正**。

按照常理來說,map將函式物件作為其引數,迭代遍歷陣列的每個元素,並為每個元素呼叫一次函式,將元素值作為引數傳遞。這些函式呼叫的結果累積到乙個新陣列中。parseint是內建函式,它嘗試將字串解析為數字並返回,如果無法解析為數字則返回nan。所以上述例子應該顯示1,2,3。那麼問題出在哪?

根據map文件可知,map()語法:

var new_array = arr.map(function callback(currentvalue[, index[, array]]) [, thisarg])
callback:產生新陣列元素的函式,帶有三個引數:currentvalue、index和array

所以,所以例子中的parseint函式應該是:parseint(「1」,0,arr)、parseint(「2」,1,arr)、parseint(「3」,2,arr)。

那麼我們再來看看parseint這個內建函式,根據parseint文件,parseint(語法):

parseint (string , radix)
parseint函式根據指定的基數radix生成乙個整數值,該值由字串引數string的內容解釋決定。字串中的前導空格被忽略。如果基數未定義或為0,則預設是10。

例如:parseint(『1』)、parseint(『1』,0)以及parseint(『1』,10),結果都是1。

同理:parseint(『abcd』,16)結果為43981,而parseint(『abcd』,8)結果為nan

由此可見:

由於parseint中只需要兩個引數,parseint(「1」,0,arr)、parseint(「2」,1,arr)、parseint(「3」,2,arr)實為parseint(「1」,0)、parseint(「2」,1)、parseint(「3」,2)。只有parseint(「1」,0)是能夠被正確解析的,結果為1,parseint(「2」,1)、parseint(「3」,2)不能被正確解析,結果為nan。

修改例子:

r = arr.map(number);

r = arr.map(function (value));

JS 理解JS中的物件

物件是object資料型別的值 物件是一組沒有特定順序的值 其中每個值都有乙個名字,從而,物件看起來就像是一組名值對。建立並定義物件的方法 1.var person new object person.name carolina person.age 29 person.job dream pers...

js中的函式

1 js中的string物件 1 內建的 2 屬性 length 3 方法 indexof 查詢子字串 匹配字串 查詢到了,返回 字串 出現的位置 沒有找到 返回 1 charat 返回指定位置的字串 substr 字串的擷取,可加兩個引數,形如 2,2 第二個位置 長度 也可以是乙個引數,則表示從...

js中with的用法

with語句用於設定 在特定物件中的作用域。它的語法 with expression statement 例如 var smessage hello with smessage alert touppercase 輸出 hello 在這個例子中,with語句用於字串,所以在呼叫touppercase...