2011-12-28 14 views
7
文字列リテラル

可能性の重複:何を参照してください"文字列" オブジェクトの違い、およびJavaScript

console.log(new String("string instance")); 
console.log("string instance"); 


Difference between the javascript String Type and String Object?

Firebugのでは、この単純なコードを書きます:

enter image description here

これら2つの呼び出しが異なる出力をもたらす理由は何ですか?なぜ文字列リテラルがStringオブジェクトを通して文字列を作成するのと同じではないのですか?火かき棒の表現スタイルですか?あるいは、それらは性質が異なりますか?

+0

はポスト http://stackoverflow.comをご覧くださいしないconsole.log((new String("string instance")).toString())

を試してみてください/ questions/2051833/javascript-string-type-and-string-objectの違い – Ravia

+0

-1明白な重複 –

+2

@ TomalakGeret'kalの重複は、下書きを保証するものではありません。あなたは担当者を持っているか、それを指摘して他の誰かが指摘します。 – Davy8

答えて

6

これらは異なります。文字列リテラルはプリミティブな値ですが、 "String"インスタンスはオブジェクトです。基本的な文字列型は、必要に応じてStringオブジェクトに自動的に昇格されます。

同様に、数値プリミティブと "Number"インスタンス、ブールプリミティブと "Boolean"インスタンスがあります。

+1

Stringオブジェクトから文字列リテラルを取得するには、Stringオブジェクトに対して 'toString()'関数を呼び出すことができます。 たとえば、 'new String(" bork ")===" bork "'はfalseで、 'new String(" bork ")。toString()===" bork "'は真です。 ああ、javascript ... –

+0

この「プロモーション」はどのように行われますか? – JohnMerlino

2

new String("...")は、文字列オブジェクトを返します。

"..."は、文字列プリミティブを返します。

いくつかの相違点は次のとおりです。

  • new String("foo") === new String("foo") - false。オブジェクト参照等価規則
  • "foo" === "foo" - true;文字列の平等は

ルールと:

  • new String("foo") instanceof Object - trueObject
  • "foo" instanceof Object - falseから派生したオブジェクトです。オブジェクトではなくプリミティブな値です

ほとんどの場合、これらの「癖」のためにプリミティブな値が必要です。文字列オブジェクトは、追加時に自動的にプリミティブ文字列に変換され、その文字列にはString.prototype関数が呼び出されます。

詳細情報in the specs

1

console.log("string instance");文字列リテラルを印刷しますが、console.log(new String("string instance"));はオブジェクトなので、各インデックスや文字のように文字列の詳細をすべて印刷します。以下のスクリーンショットを見て、それぞれの文字が"string instance"であることを確認してください。

enter image description here

1

new String("string instance")がオブジェクトであるため、とにかく、それはだ、とにconsole.logは自動的に文字列化オブジェクト

関連する問題