亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么parseInt使用Array#map生成NaN?

為什么parseInt使用Array#map生成NaN?

繁花不似錦 2019-06-10 17:09:57
為什么parseInt使用Array#map生成NaN?從Mozilla開發人員網絡:[1,4,9].map(Math.sqrt)將產生:[1,2,3]為什么這樣做:['1','2','3'].map(parseInt)讓我們這樣做:[1, NaN, NaN]我在Firefox3.0.1和Chrome0.3中進行了測試,作為免責聲明,我知道這不是跨瀏覽器功能(沒有IE)。我發現以下內容將達到預期的效果。然而,它仍然不能解釋parseInt.['1','2','3'].map(function(i){return +i;}) // returns [1,2,3]
查看完整描述

3 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

中的回調函數Array.map參數:

從同樣的Mozilla頁面你所鏈接的:

回調由三個參數調用:元素的值、元素的索引和正在遍歷的Array對象。“

所以如果你調用一個函數parseInt這實際上是期望參數,第二個參數將是元素的索引。

在這種情況下,你最后打電話給parseInt與基數0,1和2依次。第一種方法與不提供參數相同,因此它基于輸入(在本例中為10基)默認?;鶖?是不可能的數字基數,3不是基數2中的有效數字:

parseInt('1', 0); // OK - gives 1parseInt('2', 1); // FAIL - 1 isn't a legal radixparseInt('3', 2); // FAIL - 3 isn't legal in base 2

因此,在本例中,您需要包裝器函數:

['1','2','3'].map(function(num) { return parseInt(num, 10); });

或者使用ES 2015+語法:

['1','2','3'].map(num => parseInt(num, 10));

(在這兩種情況下,最好是明示提供基數給parseInt如圖所示,因為否則它將根據輸入來猜測基數。在一些較舊的瀏覽器中,前導0會導致猜測八進制,這往往是有問題的。如果字符串以0x.)


查看完整回答
反對 回復 2019-06-10
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

map正在傳遞第二個參數,這個參數(在許多情況下)會導致混亂。parseInt的基數參數。

如果使用下劃線,則可以:

['10','1','100'].map(_.partial(parseInt, _, 10))

或無下劃線:

['10','1','100'].map(function(x) { return parseInt(x, 10); });


查看完整回答
反對 回復 2019-06-10
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

我敢打賭,這是關于ParseInt的第二個參數,基數的奇怪的事情。為什么它要用Array.map而不是當你直接調用它的時候,我不知道。

//  Works fineparseInt( 4 );parseInt( 9 );//  Breaks!  Why?[1,4,9].map( parseInt );
//  Fixes the problem[1,4,9].map( function( num ){ return parseInt( num, 10 ) } );


查看完整回答
反對 回復 2019-06-10
  • 3 回答
  • 0 關注
  • 644 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號