为什么null和未定义DOMWindow类型?

Jam*_*ice 10 javascript phantomjs

当您在浏览器中或在Node.js中运行以下代码时,您将获得注释中列出的预期结果:

Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Run Code Online (Sandbox Code Playgroud)

但是,当您在PhantomJS中运行该代码时,输​​出就是[object DOMWindow]两种情况.

这似乎很奇怪,因为undefinednull都是原始的类型.该typeof操作似乎工作,因为它在其他环境(包括不typeof null === "object"怪癖),所以它会出现PhantomJS并至少有不确定型的概念:

typeof undefined; // "undefined"
Run Code Online (Sandbox Code Playgroud)

它还声称Object.prototype.toString包含本机代码,这可能表明Phantom本身没有做任何修改实现的事情(我不知道是否是这种情况) - 我无法在源代码中找到任何有用的东西):

Object.prototype.toString.toString(); // "function toString() { [native code] }"
Run Code Online (Sandbox Code Playgroud)

那么,为什么PhantomJS不使用(或至少暴露)正确[[Class]]的属性值nullundefined,是有办法,我改变这种状况?我知道我可以使用不同的方法来确定类型,但我宁愿不必这样做.

Ari*_*yat 7

它是两件事的组合.脚本在网页中执行,因此全局对象是window对象,如下所示:

console.log(this.toString()); // [object DOMWindow]
Run Code Online (Sandbox Code Playgroud)

此外,在上述条件下伪造对象原型链的JavaScript实现版本存在问题.

这可能会在将来的某个版本中修复.