簡體   English   中英

字符串數組的奇怪Javascript行為

[英]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個參數的回調:

  1. 當前元素
  2. 元素的索引
  3. 調用此函數的數組

parseInt最多需要兩個參數:

  1. 要解析的字符串
  2. (可選)基數,即數字的基數。

所以在傳遞parseIntmap ,你基本上得到以下調用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM