JavaScript reduce не может обрабатывать математические функции?

Я пытаюсь выполнить очевидную задачу:

var maxVal = [ 1, 2, 3, 4, 5 ].reduce( Math.max, 0 );

и в результате получаю:

NaN

. Чтобы это работало, мне нужно сделать анонимную функцию следующим образом:

var maxVal = [ 1, 2, 3, 4, 5 ].reduce( function ( a, b ) { 
                                           return Math.max(a, b);
                                       }, 0 );

Кто-нибудь может сказать мне , почему ? Обе функции принимают два аргумента и обе возвращают одно значение. В чем разница?

Другой пример может быть таким:

var newList = [[1, 2, 3], [4, 5, 6]].reduce( Array.concat, [] );

Результат:

[1, 2, 3, 0, #1=[1, 2, 3], #2=[4, 5, 6], 4, 5, 6, 1, #1#, #2#]

Я могу запустить этот пример в node.js только в этой форме (у массива нет concat в node.js v4.12, который Я использую сейчас):

var newList = [[1, 2, 3], [4, 5, 6]].reduce( [].concat, [] );    

, а потом получаю это:

[ {}, {}, 1, 2, 3, 0, [ 1, 2, 3 ], [ 4, 5, 6 ], 4, 5, 6, 1, [ 1, 2, 3 ], [ 4, 5, 6 ] ]

И почему это?

13
задан trzewiczek 14 October 2011 в 13:01
поделиться