2016-03-25 16 views
8
この documentation 1として

console.logはオブジェクトのtoStringメソッドを呼び出しますか?これらのオブジェクトのそれぞれの

文字列表現は、リストされた出力順序で一緒 が付加されています。あたりanswer

としても

+ Xだけで、文字列の中にオブジェクトxを強制し、[オブジェクト オブジェクト]:

だから、私の質問は

です

もし私がすれば

str = new String("hello") 
console.log(str) //prints the string object but not 'hello' 
console.log(""+str) //prints "hello" 

したがって、最初にオブジェクトを出力するだけです(toString()メソッドを呼び出さない)。

しかし、2番目のケースでは、それは強制的ではなく、単純にプリミティブ値を出力します。どうしてこんなことに?

console.logは、オブジェクトを印刷するために呼び出しますか?

これは、questionの複製ではありません。

+0

ような何かを行うことができますか? – Roberto

+0

@Robertoいいえ、Mozzilaに限られていません。 – gurvinder372

答えて

7

コンソールAPIを変換するタイプが存在しないですので、標準のAPIを意味するが、すべてのブラウザに実装されているものなので、ベンダーは通常、APIのメソッドの出力を定義する標準仕様がないため、独自の方法で実装する自由があります。

特定のブラウザのコンソールAPIの実際の実装を確認しない限り、決して確実ではありません。 GitHubには、主要なブラウザの実装の違いをリストしたtrackerがあります。

あなたはFFでの実装を見てみると(利用可能here - ログの検索が)、それは

以下のコメントを持っている人間が使用するために設計されたオブジェクトの複数行文字列化、

実際の実装では、log()に渡される引数の型がチェックされ、その型に基づいて異なる表現が生成されます。彼らは二つの異なるtypesがあるため

あなたの場合、log()プリントStringコンストラクタを使用して作成したliteral表記法を使用して作成した文字列と文字列の2つの異なる値に来ます。 hereで説明したように、リテラル表記を使用して作成されたストリングはString Primitivesと呼ばれ、ストリングコンストラクターを使用して作成されたストリングはString Objectsと呼ばれます。

var str1 = 'test'; 
var str2 = new String('hello'); 

typeof str1 // prints "string" 
typeof str2 // prints "object" 

タイプが異なるため、コンソールAPIでは文字列表現が異なります。あなたはFFのコンソールを実装するためのコードを通過する場合は、最後の文は、だからあなたの質問に答えるために

return " " + aThing.toString() + "\n"; 

で、FFでのコンソールAPIは、引数の型が{undefined,null,object,set,map}タイプのいずれかでない場合にのみ、引数にtoString()を呼び出します。必ずしもtoString()またはvalueOf()のメソッドを呼び出すとは限りません。私はChromeの実装をチェックしなかったので、私はそれについてコメントしません。それはのtoStringを利用しない

+0

ありがとう、 – gurvinder372

1

​​str.valueOf()と思われます。 JavaScriptからの - 確定ガイド その仕事は、オブジェクトをプリミティブ値に変換することです。 valueOf()メソッドは、オブジェクトが数値コンテキストで使用され、算術演算子(+以外)および関係演算子を使用する場合に自動的に呼び出されます。ほとんどのオブジェクトは、妥当なプリミティブ表現を持たず、このメソッドを定義しません。

は---編集----申し訳ありませんが、間違った行をコピーし、私はどんな仕様で定義されている「」+ STR、

+5

いいえ、 'console.log(str.valueOf())'と 'console.log(str)'は異なる出力を返します – gurvinder372

1

、あなたはあなたの質問がMozzillaに制限されているこの

clog = function(msg){console.log(msg.toString());} 
clog(myObj); 
関連する問題