Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Map、parseInt的奇怪行为_Javascript_Functional Programming - Fatal编程技术网

Javascript Map、parseInt的奇怪行为

Javascript Map、parseInt的奇怪行为,javascript,functional-programming,Javascript,Functional Programming,可能重复: 我看到了这个奇怪的JavaScript行为示例 评估为 [10, NaN, 2, 3, 4] 有人能解释一下这种行为吗?我用chrome和firebug进行了验证 ['10','10','10','10','10'].map(function(x){return parseInt(x);}) 以整数形式正确返回10的数组。这是对map()的不当使用、parseInt的错误还是其他原因?parseInt使用map传入的前两个参数,并使用第二个参数指定基数 下面是代码中发生的情况:

可能重复:

我看到了这个奇怪的JavaScript行为示例

评估为

[10, NaN, 2, 3, 4]
有人能解释一下这种行为吗?我用chrome和firebug进行了验证

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

以整数形式正确返回10的数组。这是对map()的不当使用、parseInt的错误还是其他原因?

parseInt
使用map传入的前两个参数,并使用第二个参数指定基数

下面是代码中发生的情况:

parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4
这里有一个指向MDN的链接,位于
parseInt
:。

接收两个参数:字符串和基数:

var intValue=parseInt(字符串[,基数])

处理程序的第二个参数是index:

。。。回调由三个参数调用:元素的值, 元素的索引和正在遍历的数组对象

来自MDN:

回调由三个参数调用:元素的值, 元素的索引和正在遍历的数组对象


parseInt()
接受两个参数。值和基数。这意味着正在使用非预期参数调用
parseInt()
函数。

ah这是有道理的,所以第二个数字尝试在基数1中求值,但失败了,其余的将只返回索引?这是有道理的。谢谢。其余的不是严格意义上的“返回索引”,但结果是一样的,因为基
x
中的任何数字
x
都表示为字符串
'10'
。请注意,如果您的
'10'
s数组中有36个以上的元素,那么您将在最后得到更多的
NaN
s。是否有解决方法来实现这一点?thx@VincentWasteels是的,有点。您可以使用
[…].map(parseFloat)
[…].map(Number)
。两者都将字符串转换为给定数组中的数字。但是
parseFloat
Number
的工作原理与
parseInt
稍有不同:两者都将转换浮点和整数,而
Number
将转换以数字开头的字符串,并将其他字符包含在
NaN
中(例如
10abc
Number
还可以将所有空格和不可打印字符强制转换为
0
。作为一个字符串到数字的转换器,两者都能很好地工作,如果你真的需要使用
parseInt
:那么使用匿名函数作为
map
参数。回答正确,但不提供解决方案或替代方案。是的,这在我发布它时显示在related中,但在我编写它时不会显示在搜索结果中。我对它作为副本关闭没有任何问题。最近(我想这周)还有另一个类似的问题。我试图找到那个,只能找到我链接到的那个。这实际上就是我看到的那个:我认为这里的答案比那个好,但是你提到的旧的答案也很清楚。一个解决方法是围绕parseInt创建自己的包装,比如:
const-toInt=(value)=>parseInt(value)。这将按照您的预期工作。然后像这样使用它:
['10'、'10'、'10'、'10'、'10'].map(toInt)
你也可以使用lodash的
.toInteger()
函数和lodash
.map()
parseInt('10',0)//10
实际上没有比base-1更有意义。那也应该是NaN。但我想在一种语言中,null、0、false、undefined和“”几乎是一样的,我可以大致理解为什么
if(基数){…}else{…假设基数为10…}
。所以基本上未定义和0都是假的,所以它们取相同的值codepath@kornfridge这在“如果基数未定义或0(或不存在)”下的链接中解释
parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4