Почему запятая ',' и плюс '+' записывают вывод консоли в другой шаблон?

Я использую инструкцию console.log для отладки, но натолкнулся на сценарий, в котором использование ',' или '+' с помощью оператора console.log регистрирует вывод в разных шаблонах. Например

(function () {
    var x = [];
    x.push({
        a: 1,
        b: 2,
    }, {
        a: 4,
        b: 3,
    }, {
        a: 5,
        b: 6
    }, {
        a: 7,
        b: 8,
    })
    console.log('Logging with , ', x);
    console.log('Logging with + ' + x);
}())

Когда я использую ',' с console.log, я вижу вывод как

Logging with ,  [Object, Object, Object, Object]

и каждый из этих объектов расширяется. Но с '+' я вижу вывод как

Logging with + [object Object],[object Object],[object Object],[object Object]

Для демонстрации я создал этот jsfiddle.

Не могли бы вы помочь мне понять, почему мы видим эту разницу.

Ответ 1

+ (оператор конкатенации строк) с объектом вызовет метод toString для объекта и будет возвращена строка . Итак, '' + object эквивалентно object.toString(). И toString на объекте возвращается "[object Object]".

С , объект передается как отдельный аргумент методу log.

Ответ 2

Чтобы добавить, возможно, большую ясность (или многословность) с примерами ответа от Tushar's:

В отношении конкатенации (исключая console.log() stuff) используйте оператор +. Причина использования запятой в console.log() заключается в том, что параметры, которые принимает функция, представляют собой переменное количество аргументов.

Итак, если вы делаете console.log('a' + 'b'), вы получаете ab

но если вы делаете console.log('a' , 'b'), вы получаете a b

Теперь, если вы делаете console.log('a' + {a : 'a'}), вы получаете a[object Object], что не очень полезно,

тогда как если вы сделаете console.log('a' , {a : 'a'}), вы получите {a: 'a'}

Таким образом, запятая передает объект как параметр, который использует toString() этого объекта, что предпочтительнее для console.log().