为什么JavaScript';s map和parseInt函数每隔调用返回一次NaN?

为什么JavaScript';s map和parseInt函数每隔调用返回一次NaN?,javascript,Javascript,跑步时 ["6", "1", "0", "3", "3"].map(parseInt) 在浏览器的JavaScript控制台中,我获得了输出 [6, NaN, 0, NaN, 3] !!但我期待着 [6, 1, 0, 3, 3] 这似乎与parseInt可以接受两个参数而不是一个参数有关。我的印象是,map只对数组的每个元素分别调用给定的函数。有人能解释一下map是如何工作的以及它为什么会导致这种奇怪的行为吗?原因是parseInt是parseInt(字符串,基数) 当map运行时,它返

跑步时

["6", "1", "0", "3", "3"].map(parseInt)
在浏览器的JavaScript控制台中,我获得了输出

[6, NaN, 0, NaN, 3]
!!但我期待着

[6, 1, 0, 3, 3]


这似乎与parseInt可以接受两个参数而不是一个参数有关。我的印象是,
map
只对数组的每个元素分别调用给定的函数。有人能解释一下map是如何工作的以及它为什么会导致这种奇怪的行为吗?

原因是parseInt是
parseInt(字符串,基数)

当map运行时,它返回参数
(值、索引、数组)

因此,它被当作

parseInt("6", 0);
parseInt("1", 1);
parseInt("0", 2);
parseInt("3", 3);
parseInt("3", 4);

原因是parseInt是
parseInt(字符串,基数)

当map运行时,它返回参数
(值、索引、数组)

因此,它被当作

parseInt("6", 0);
parseInt("1", 1);
parseInt("0", 2);
parseInt("3", 3);
parseInt("3", 4);
根据
parseInt
接受两个参数:字符串整数和基数。同时,
map
传递两个参数:value和index

所以,基本上你的电话相当于:

["6", "1", "0", "3", "3"].map((value, index) => parseInt(value, index))
当无法使用给定参数对其进行解析时,会导致出现
NaN

特别是:

  • parseInt(“6”,0)
    正在工作,因为它似乎使用默认的基数(10)
  • parseInt(“1”,1)
    失败,因为1是无效的基
  • parseInt(“0”,2)
    正在工作,它是十进制0的二进制表示形式
  • parseInt(“3”,3)
    失败,因为基3中不能有“3”
  • parseInt(“3”,4)
    正在工作,它是十进制3的4位表示形式
根据,
parseInt
接受两个参数:字符串整数和基数。同时,
map
传递两个参数:value和index

所以,基本上你的电话相当于:

["6", "1", "0", "3", "3"].map((value, index) => parseInt(value, index))
当无法使用给定参数对其进行解析时,会导致出现
NaN

特别是:

  • parseInt(“6”,0)
    正在工作,因为它似乎使用默认的基数(10)
  • parseInt(“1”,1)
    失败,因为1是无效的基
  • parseInt(“0”,2)
    正在工作,它是十进制0的二进制表示形式
  • parseInt(“3”,3)
    失败,因为基3中不能有“3”
  • parseInt(“3”,4)
    正在工作,它是十进制3的4位表示形式

    • [“6”、“1”、“0”、“3”、“3”]。map(v=>parseInt(v))
      似乎可以工作。不确定为什么它不能仅与函数一起工作。请尝试以下操作:[“6”、“1”、“0”、“3”、“3”].map(v=>parseInt(v,10));这确实是一个复制品。如果我在最初的搜索中找到了另一个问题,我就不会提出这个问题。
      [“6”、“1”、“0”、“3”、“3”]。map(v=>parseInt(v))
      似乎有效。不确定为什么它不能仅与函数一起工作。请尝试以下操作:[“6”、“1”、“0”、“3”、“3”].map(v=>parseInt(v,10));这确实是一个复制品。如果我在最初的搜索中找到了另一个问题,我就不会提出这个问题。这是一个很好的解释。它只缺少到的链接,您可以在其中验证
      map
      是否向函数传递了3个参数(如果不能传递,则传递2个参数(如果不能传递,则传递1个参数)。这是一个很好的解释。它只缺少指向的链接,您可以在其中验证
      map
      是否向函数传递了3个参数(如果无法传递,则传递2个参数(如果无法传递,则传递1个参数))。