4

私は以前、両方の割り当てa = "foo"a = new String('foo')は同じものだと思っていました。ただし、前者の宣言では、console.log(a instanceof Object)またはをconsole.log(a instanceof String)返しますが、後者falseの場合は期待値を返します。true

これは2つの理由で奇妙に思えます。まず、通常の宣言を使用してもa = 'foo'、すべての文字列メソッドがそれに対して機能し、オブジェクトから継承されていることを示しStringます。そして次に、をa.constructor返しますString

誰かが何が起こっているのか説明できますか?

4

1 に答える 1

3

"foo"プリミティブリテラルです。

しかしnew String("foo")、これはクラスStringのインスタンスです。

プリミティブ値に対してメソッドを呼び出すことができるのは、

JavaScriptはプリミティブをStringオブジェクトに自動的に変換するため、プリミティブ文字列にStringオブジェクトメソッドを使用できます。メソッドがプリミティブ文字列で呼び出される場合、またはプロパティルックアップが発生する場合、JavaScriptは文字列プリミティブを自動的にラップし、メソッドを呼び出すか、プロパティルックアップを実行します。

MDNから)

于 2012-12-19T18:28:22.453 に答える