このドキュメントに従って、
これらの各オブジェクトの文字列表現は、リストされた順序で一緒に追加され、出力されます。
また回答通り
+ 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
オブジェクトを印刷するために呼び出すメソッドはどれですか?
これはこの質問の複製ではないことに注意してください。
コンソールAPIは、仕様で定義されている標準のAPIではなく、すべてのブラウザーに実装されるものであり、APIのメソッドの出力を定義する標準の仕様がないため、ベンダーは通常、独自の方法で実装する自由があります。 。
特定のブラウザーのコンソールAPIの実際の実装を確認しない限り、確信が持てません。GitHubには、主要なブラウザーからの実装の違いをリストしたトラッカーがあります。
FF(ここから入手可能-ログを検索)で実装を見ると、以下のコメントがあります。
人間が使用するために設計されたオブジェクトの複数行の文字列化
実際の実装では、渡される引数のタイプをチェックし、そのタイプにlog()
基づいて、別の表現を生成します。
あなたの場合、表記法をlog()
使用して作成された文字列literal
とString
コンストラクタを使用して作成された文字列の2つの異なる値が異なるため、これらは2 つの異なる値を出力しますtypes
。ここで説明するように、リテラル表記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はtoString()
、引数のタイプが{undefined,null,object,set,map}
タイプの1つでない場合にのみ引数を呼び出します。常にメソッドtoString()
やvalueOf()
メソッドを呼び出すわけではありません。私はChromeの実装をチェックしなかったので、コメントしません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加