Подтвердить что ты не робот

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' }?

4b9b3361

Ответ 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)); распечатать свой объект. это работает!