ブラウザーまたは Node.js で次のコードを実行すると、コメントに記載されている期待される結果が得られます。
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
ただし、そのコードを PhantomJS で実行すると[object DOMWindow]、どちらの場合も出力されます。
undefinedとnullはどちらもネイティブ タイプであるため、これは奇妙に思えます。このtypeof演算子は、他の環境 (変わったものを含むtypeof null === "object") と同じように機能するように見えるため、PhantomJS には少なくとも未定義型の概念があるように見えます。
typeof undefined; // "undefined"
またObject.prototype.toString、ネイティブ コードが含まれていると主張しています。これは、Phantom 自体が実装を変更するために何もしていないことを示している可能性があります (そうであるかどうかはわかりませんが、ソースで有用なものを見つけることができませんでした)。 ):
Object.prototype.toString.toString(); // "function toString() { [native code] }"
では、PhantomJS がとの正しい[[Class]]プロパティ値を使用しない (または少なくとも公開しない) のはなぜですか?それを変更する方法はありますか? タイプを判別するために別の方法を使用できることはわかっていますが、そうする必要はありません。nullundefined