字符串数组的奇怪Javascript行为

字符串数组的奇怪Javascript行为,javascript,Javascript,有人用JavaScript指出了这个奇怪的数组结果,我希望有人能解释为什么会发生这种情况 如果我有这样一个数组: var arr = ["10", "10", "10", "10"]; 我试着把这些“10”映射成这样的整数: arr.map(parseInt); 结果将是一个值为:[10,NaN,2,3]的数组(我在Chrome的控制台中运行了所有这些代码) 我希望结果是:[10,10,10,10] 我知道JavaScript可以将字符串中的整数解析成不同的编号系统,比如二进制,我认为这可以

有人用JavaScript指出了这个奇怪的数组结果,我希望有人能解释为什么会发生这种情况

如果我有这样一个数组:

var arr = ["10", "10", "10", "10"];
我试着把这些“10”映射成这样的整数:

arr.map(parseInt);
结果将是一个值为:[10,NaN,2,3]的数组(我在Chrome的控制台中运行了所有这些代码)

我希望结果是:[10,10,10,10]

我知道JavaScript可以将字符串中的整数解析成不同的编号系统,比如二进制,我认为这可以解释2和3三的来源。但是为什么parseInt会改为在不同的基础上解析它们呢?有人能解释一下为什么我会得到这个结果吗?

阅读上的手册页,它包含两个参数。一个值和一个基数

发送三个参数:
currentValue、index、array

改用
编号

["10", "20"].map(Number)
接受接受接受3个参数的回调:

  • 当前元素
  • 元素的索引
  • 调用此函数的数组
  • 最多接受两个参数:

  • 要分析的字符串
  • (可选)基数,即数字的基数
  • 因此,在将
    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
    
    一种更简单、更有效的方法是使用:

    var arr=[“10”、“10”、“10”、“10”、“23”、“74”];
    
    控制台日志(arr.map(编号))您会看到这种奇怪的行为,因为实际的Parseint将第二个值视为基数

    ParseInt语法: parseInt(字符串,基数)

    developer.mozilla.org中解释了这种行为

    供参考 它是这样工作的:

     var arr = ["10", "10", "10", "10"];
     var newArr = arr.map(function(num){
        return parseInt(num);
     });
    
     console.log(newArr);
    

    换句话说,
    parseint(“10”,0)=10,parseint(“10”,1)=NaN,parseint(“10”,2)=2,parseint(“10”,3)=3
    这是对函数的简单误解。