[英]Odd Javascript behavior for array of strings
有人在JavaScript中指出這個奇怪的數組結果,我希望有人可以解釋為什么會發生這種情況。
如果我有這樣的數組:
var arr = ["10", "10", "10", "10"];
我嘗試將這些“10”映射到整數,如下所示:
arr.map(parseInt);
結果將是一個值為[10,NaN,2,3]的數組(我在Chrome的控制台中運行了所有這些代碼)
我預計結果是:[10,10,10,10]
我理解JavaScript可以將字符串中的整數解析為不同的編號系統,比如二進制,我認為這解釋了2和3三個來自哪里,有點。 但是為什么parseInt會改變為在不同的基礎上解析它們? 有人可以解釋為什么這是我得到的結果?
Array.prototype.map
接受一個帶有3個參數的回調:
parseInt
最多需要兩個參數:
所以在傳遞parseInt
到map
,你基本上得到以下調用:
parseInt(arr[0], 0); // if 0, same as default
parseInt(arr[1], 1); // Parse as base 1
parseInt(arr[2], 2); // Parse as base 2 or binary
parseInt(arr[3], 3); // Parse as base 3
完成您正在嘗試的更簡單,更有效的方法是使用Number
:
var arr = ["10", "10", "10", "10", "23", "74"]; console.log(arr.map(Number));
閱讀parseInt上的手冊頁,它需要兩個參數。 一個值和一個基數。
Array.prototype.map發送三個參數: currentValue, index, array
請改用Number
["10", "20"].map(Number)
它以這種方式工作:
var arr = ["10", "10", "10", "10"];
var newArr = arr.map(function(num){
return parseInt(num);
});
console.log(newArr);
您會看到奇怪的行為,因為實際的Parseint將第二個值視為基數
ParseInt語法:parseInt(string,radix);
developer.mozilla.org中解釋了此行為
供參考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.