私は node.js を使用しているため、これは V8 に固有のものである可能性があります。
私は常に typeof と instanceof の違いに奇妙な点があることに気付きましたが、ここに本当に私を悩ませているものがあります:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
何が起こっているのですか?
私は node.js を使用しているため、これは V8 に固有のものである可能性があります。
私は常に typeof と instanceof の違いに奇妙な点があることに気付きましたが、ここに本当に私を悩ませているものがあります:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
何が起こっているのですか?
typeof
渡したもののプリミティブ型を「返す」構造です。
instanceof
右オペランドが左のプロトタイプ チェーンのどこかに現れるかどうかをテストします。
"abc"
文字列リテラルと文字列オブジェクトには大きな違いがあることに注意してくださいnew String("abc")
。後者の場合、typeof
「文字列」ではなく「オブジェクト」を返します。
リテラル文字列とString
クラスがあります。これらは別個のものですが、シームレスに動作します。つまり、String
メソッドをリテラル文字列に適用でき、リテラル文字列がString
オブジェクト インスタンスであるかのように動作します。
インスタンスを明示的に作成したString
場合、それはオブジェクトであり、String
クラスのインスタンスです。
var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
出力:
object
true