39

これを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' }ですか?

4

5 に答える 5

75

+ xは、オブジェクトxを文字列に強制します。これは次の[object Object]とおりです。

http://jsfiddle.net/Ze32g/

consoleきれいな印刷は、誰かがオブジェクトとlogメソッドの一部として実装した非常に優れた、おそらく非常に複雑な基になるコードです。

これを試して:

console.log("hmm: ", x);
于 2013-01-30T05:25:19.147 に答える
17

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 を参照してください。

于 2013-01-30T05:54:47.510 に答える
6

JSON.stringify文字列を追加してオブジェクトを印刷するときに使用します

console.log("Haa"+JSON.stringify(x))
于 2013-01-30T05:25:26.457 に答える
3

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

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 でのみ有効です。ですから、Google 社員に任せておきます。

Edit2:私は頭がおかしいわけではありません。睡眠が必要なだけです。あなたは Node.js を書きました。タグとして追加させていただきます。

于 2013-01-30T05:25:42.297 に答える