No it doesn't assume initial value as 0, and it's optional:
initialValue Optional
A value to which previousValue is initialized the first time the callback is called. If initialValue is specified, that also causes currentValue to be initialized to the first value in the array. If initialValue is not specified, previousValue is initialized to the first value in the array, and currentValue is initialized to the second value in the array.
0 is just a safer way to tell the accumulation to start at 0
No it doesn't assume initial value as 0, and it's optional:
initialValue Optional
A value to which previousValue is initialized the first time the callback is called. If initialValue is specified, that also causes currentValue to be initialized to the first value in the array. If initialValue is not specified, previousValue is initialized to the first value in the array, and currentValue is initialized to the second value in the array.
Source MDN
You're right. Reduce method requires a initial value, when not declared it assumes 0 but it can get nasty really quick.
I think the 0 serves as an initial value for the reduce method so you don't get an error if you get an empty array. I could be wrong though, lol.
Please, use spoiler flag next time. Your posts are visible in the homepage otherwise. I'm not so sure it's really needed here, but...
Read mikemfleming's post below.