Po uruchomieniu następujący kod w przeglądarce lub w node.js, można uzyskać oczekiwane efekty wymienione w komentarzach:Dlaczego null i undefined są typu DOMWindow?
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Po uruchomieniu tego kodu w PhantomJS jednak wyjście jest [object DOMWindow]
w oba przypadki.
Wydaje się to dziwne, ponieważ undefined
i null
są typami natywnymi. Operator typeof
wydaje się działać jak ma to miejsce w innych środowiskach (w tym typeof null === "object"
dziwactwo), więc wydaje się, że PhantomJS ma przynajmniej mieć pojęcie typu nieokreślonego:
typeof undefined; // "undefined"
Twierdzi ona również, że Object.prototype.toString
zawiera rodzimy kod, który może wskazywać, że Phantom nie robi nic, aby zmodyfikować implementację (nie wiem, czy tak jest, czy nie - nie znalazłem nic przydatnego w źródle):
Object.prototype.toString.toString(); // "function toString() { [native code] }"
Dlaczego więc PhantomJS nie używa (lub przynajmniej nie eksponuje) prawidłowego [[Class]]
wartości właściwości dla null
i undefined
i czy istnieje sposób, że to zmienię? Wiem, że mógłbym użyć innej metody do określenia typu, ale wolałbym nie.
To brzmi jak błąd. – SLaks
@SLaks - Tak, to była moja pierwsza myśl, ale to nie jest tak, że jest to nietypowy lub rzadko spotykany kod ... Bardzo wątpię, że jestem pierwszym, który natknął się na to, a jednak nie znalazłem żadnego odniesienia do w dowolnym miejscu w narzędziu do śledzenia problemów. –
Z ciekawości: na jakie problemy próbujesz rozwiązać lub na które warunki wpływa to zachowanie? –