Когда вы запустите следующий код в браузере или в 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"
quirk), поэтому, по-видимому, PhantomJS, по крайней мере, имеет концепцию типа undefined:
typeof undefined; // "undefined"
Он также утверждает, что Object.prototype.toString
содержит собственный код, который может указывать на то, что Phantom сам ничего не делает для изменения реализации (я не знаю, если это случай или нет, хотя - я не был может найти что-нибудь полезное в источнике):
Object.prototype.toString.toString(); // "function toString() { [native code] }"
Итак, почему PhantomJS не использует (или хотя бы выставляет) правильные значения свойств [[Class]]
для null
и undefined
, и есть ли способ изменить это? Я знаю, что я мог бы использовать другой метод для определения типа, но мне бы этого не хотелось.