私は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」ではなく「object」を返します。
リテラル文字列があり、String
クラスがあります。これらは分離されていますが、シームレスに機能します。つまり、String
メソッドをリテラル文字列に適用でき、リテラル文字列がString
オブジェクトインスタンスであるかのように動作します。
String
インスタンスを明示的に作成する場合、それはオブジェクトであり、String
クラスのインスタンスです。
var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
出力:
object
true