web-dev-qa-db-ja.com

Javascript console.log(object)vs.連結文字列

私はこれをnode.jsで実行しています:

_> x = { 'foo' : 'bar' }
{ foo: 'bar' }
> console.log(x)
{ foo: 'bar' }
undefined
> console.log("hmm: " + x)
hmm: [object Object]
undefined
_

私が理解していないのは、console.log(x)がオブジェクトを「きれいに印刷」するのに対し、文字列の連結が「ugい印刷」をする理由です。さらに重要なことは、_hmm: { foo: 'bar' }_を印刷する最良の方法は何ですか?

34
John Zwinck

+ xは、オブジェクトxを文字列に強制します。これは、単に[object Object]

http://jsfiddle.net/Ze32g/

プリティ印刷は非常に素晴らしく、おそらく非常に複雑な基礎コードであり、誰かがconsoleオブジェクトとlogメソッドの一部として実装しました。

これを試して:

console.log("hmm: ", x);
62
Explosion Pills

Console.log関数

'console.log'は、コピー(string | number | boolean)または参照(その他すべて)で渡されるパラメーターのリストを受け入れるオーバーロード関数です。

コピーによって渡される値の場合、値は文字列としてキャストすることにより出力されます。
参照渡しの値の場合、ブラウザが適切と判断した値はきれいに出力されます。

+演算子

プラス記号演算子(+)がオーバーロードされています。演算子の両側が数値の場合、2つの演算子の合計が返されます。

演算子の片側が文字列の場合、両側が文字列としてキャストされ、これら2つの文字列の連結が返されます。

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

14
Aaren Cordova

使用する JSON.stringify文字列を付加したオブジェクトを印刷する場合

console.log("Haa"+JSON.stringify(x))

複数のオプションがあります:

process.stdout.write('hmm: ')
console.dir(x)

別の...

var util = require('util')
process.stdout.write('hmm: ')
console.log(util.inspect(x, true, 10, true))

詳細については、 til.inspect docsを参照してください。

編集:申し訳ありませんが、Node.jsを読んだと思いました。これはNode.jsにのみ有効です。したがって、私はすべてのGoogle社員に任せます。

Edit2:私は夢中ではなく、ただ眠りが必要です。 Node.jsを作成しました。タグとして追加します。

3
JP Richardson

console.log(JSON.stringify(yourObject));を使用してオブジェクトを印刷できます。うまくいく!

1
user11737484