当您在浏览器或 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]]
属性值null
and undefined
,有没有办法改变它?我知道我可以使用不同的方法来确定类型,但我宁愿不必这样做。