28

私は node.js を使用しているため、これは V8 に固有のものである可能性があります。

私は常に typeof と instanceof の違いに奇妙な点があることに気付きましたが、ここに本当に私を悩ませているものがあります:

var foo = 'foo';
console.log(typeof foo);

Output: "string"

console.log(foo instanceof String);

Output: false

何が起こっているのですか?

4

2 に答える 2

42

typeof渡したもののプリミティブ型を「返す」構造です。
instanceof右オペランドが左のプロトタイプ チェーンのどこかに現れるかどうかをテストします。

"abc"文字列リテラルと文字列オブジェクトには大きな違いがあることに注意してくださいnew String("abc")。後者の場合、typeof「文字列」ではなく「オブジェクト」を返します。

于 2013-02-12T18:56:11.297 に答える
9

リテラル文字列とStringクラスがあります。これらは別個のものですが、シームレスに動作します。つまり、Stringメソッドをリテラル文字列に適用でき、リテラル文字列がStringオブジェクト インスタンスであるかのように動作します。

インスタンスを明示的に作成したString場合、それはオブジェクトであり、Stringクラスのインスタンスです。

var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);

出力:

object
true
于 2013-02-12T18:56:54.290 に答える