Javascript console.log(объект) против конкатенации строки
Я запускаю это в node.js:
> x = { 'foo' : 'bar' }
{ foo: 'bar' }
> console.log(x)
{ foo: 'bar' }
undefined
> console.log("hmm: " + x)
hmm: [object Object]
undefined
Я не понимаю, почему console.log(x)
"довольно-печатает" объект, тогда как конкатенация строк "уродливо-печатает" его. И что еще более важно, что лучший способ сделать это печать hmm: { foo: 'bar' }
?
Ответы
Ответ 1
+ x
принуждает объект x
к строке, которая просто [object Object]
:
http://jsfiddle.net/Ze32g/
Симпатичная печать - очень хороший и, вероятно, очень сложный базовый код, который кто-то реализовал как часть объекта console
и log
.
Попробуйте следующее:
console.log("hmm: ", x);
Ответ 2
Функция console.log
'console.log' - это перегруженная функция, которая принимает список параметров, которые либо передаются копией (string | number | boolean), либо ссылкой (все остальное).
В случае значений, переданных копией, значение печатается путем литья его в виде строки.
В случае значений, переданных по ссылке, значение довольно печатается, когда браузер считает нужным.
Оператор +
Оператор знака плюс (+) перегружен.
Когда обе стороны оператора являются числами, возвращается сумма двух операторов.
Если любая из сторон оператора является строкой, то обе стороны будут переданы как строка, и будет возвращена конкатенация этих двух строк.
console.log("hmm: " + x);
совпадает с записью
console.log(String("hmm: ") + String(x));
Решение
Предотвратить неявное строковое кастинг путем замены знака плюс (+) запятой (,)
console.log("hmm: ", x);
Подробнее
Более подробное описание функции "console.log" можно найти:
https://developer.mozilla.org/en-US/docs/DOM/console.log
Более подробное описание оператора плюса (+) см. в разделе:
http://www.w3schools.com/js/js_operators.asp
Ответ 3
Используйте JSON.stringify
при печати объекта с добавлением строки
console.log("Haa"+JSON.stringify(x))
Ответ 4
У вас есть несколько вариантов:
process.stdout.write('hmm: ')
console.dir(x)
Другой...
var util = require('util')
process.stdout.write('hmm: ')
console.log(util.inspect(x, true, 10, true))
Подробнее см. util.inspect.
Изменить: Извините, я думал, что прочитал Node.js. Это справедливо только для Node.js. Итак, я оставлю его для любых гуглеров.
Edit2: Я не сумасшедший, мне просто нужно спать. Вы пишете Node.js. Я собираюсь добавить его как тег.
Ответ 5
вы можете использовать console.log(JSON.stringify(yourObject));
распечатать свой объект. это работает!