Почему запятая ',' и плюс '+' записывают вывод консоли в другой шаблон?
Я использую инструкцию 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()
.