Wenn Sie den folgenden Code im Browser ausgeführt, oder in Node.js, erhalten Sie die in den Kommentaren aufgeführt erwarteten Ergebnisse:Warum sind null und undefiniert vom Typ DOMWindow?
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Wenn Sie diesen Code in PhantomJS laufen, der Ausgang ist jedoch [object DOMWindow]
in beide Fälle.
Dies scheint seltsam, seit undefined
und null
sind beide native Typen. Der typeof
Operator scheint zu funktionieren, wie es in anderen Umgebungen funktioniert (einschließlich der typeof null === "object"
Marotte), so scheint es, dass PhantomJS dest nicht an den Begriff des undefinierten Typ:
typeof undefined; // "undefined"
Es behauptet auch, dass Object.prototype.toString
enthält nativer Code, der anzeigen kann, dass Phantom selbst nichts tut, um die Implementierung zu ändern (ich weiß nicht, ob das der Fall ist oder nicht - ich konnte nichts Nützliches in der Quelle finden):
Object.prototype.toString.toString(); // "function toString() { [native code] }"
Warum verwendet PhantomJS nicht die korrekte?Eigenschaftswerte für null
und undefined
, und gibt es eine Möglichkeit, das zu ändern? Ich weiß, dass ich eine andere Methode verwenden könnte, um den Typ zu bestimmen, aber ich würde es lieber nicht tun müssen.
Das klingt wie ein Fehler. – SLaks
@SLaks - Ja, das war mein erster Gedanke, aber es ist nicht so, dass es ungewöhnlicher oder selten gefundener Code ist ... Ich bezweifle sehr, dass ich der Erste bin, der darauf stößt, und doch habe ich keinen Bezug darauf gefunden überall im Problem-Tracker. –
Aus Neugier: Welche Art von Problemen versuchen Sie zu lösen oder welche Bedingungen sind von diesem Verhalten betroffen? –