在使用Javascript中的单个元素的数组上调用Array.reduce
调用reduce数组抛出TypeError
,这是完全可以理解的,并有助于捕获错误。 但是当我用一个单独的项目在一个数组上调用它时,行为会让我困惑:
var arr = ["a"];
arr.reduce(function(a,b){
return [a,b]
}); //returns "a"
我知道reduce并不意味着在这样的数组上使用,但我发现只返回元素而不调用回调或抛出错误至少是奇怪的。
此外,MDN文档指出回调是一个“在数组中的每个值上执行的函数,取四个参数:”。
有人能解释这种行为的原因吗?
回调被认为是一个“二元函数”(即一个接受两个参数操作,另外两个参数保存currentIndex
和原始array
)。
如果只提供了一个元素,则会将未定义的值传递给currentValue
或previousValue
的回调函数,这可能会导致运行时错误。
因此,设计假定只给定一个值(无论是空数组, initialValue
还是带有一个值且没有initialValue
的数组),最好不要调用回调。
上一篇: Calling Array.reduce on an array with a single element in Javascript