Javascript 在数组中设置initialValue与不设置initialValue#减少

Javascript 在数组中设置initialValue与不设置initialValue#减少,javascript,reduce,Javascript,Reduce,第1版: var c = [ '##' ] console.log(c.reduce(function(a,b){ return b.length }, 0)) // 2 第2版: var c = [ '##' ] console.log(c.reduce(function(a,b){ return b.length })) // "##" 我只是好奇,如果我不提供初始值,为什么length方法不起作用,正如您在版本2中看到的那样 那么,在这种情况下,有人能告诉我为什么需要为le

第1版:

var c = [ '##' ]

console.log(c.reduce(function(a,b){
 return  b.length
}, 0)) // 2
第2版:

var c = [ '##' ]

console.log(c.reduce(function(a,b){
 return  b.length
})) // "##"
我只是好奇,如果我不提供初始值,为什么length方法不起作用,正如您在版本2中看到的那样

那么,在这种情况下,有人能告诉我为什么需要为length方法提供初始值才能工作吗?

Version 1 从

第一次调用回调时,previousValue和currentValue可以是两个值之一。如果在reduce调用中提供initialValue,则previousValue将等于initialValue,currentValue将等于数组中的第一个值

nextValue = '##'
在版本1中,提供了
初始值
。因此,根据文档,
previousValue
被指定为
initialValue

因此,对于第一次迭代:

previousValue = initialValue
previousValue = 0
nextValue
是数组中的第一个元素

nextValue = '##'
因此,返回值为2


版本2自我解释 如果数组为空且未提供initialValue,则将抛出TypeError如果数组只有一个元素(无论位置如何),并且没有提供initialValue,或者如果提供了initialValue,但数组为空,则将返回solo值,而不调用回调。

版本1 从

第一次调用回调时,previousValue和currentValue可以是两个值之一。如果在reduce调用中提供initialValue,则previousValue将等于initialValue,currentValue将等于数组中的第一个值

nextValue = '##'
在版本1中,提供了
初始值
。因此,根据文档,
previousValue
被指定为
initialValue

因此,对于第一次迭代:

previousValue = initialValue
previousValue = 0
nextValue
是数组中的第一个元素

nextValue = '##'
因此,返回值为2


版本2自我解释 如果数组为空且未提供initialValue,则将抛出TypeError如果数组只有一个元素(无论位置如何),并且没有提供initialValue,或者如果提供了initialValue,但数组为空,则将返回solo值,而不调用回调。