Was ist der Zweck von if (typeof window !== 'undefined')
Was ist der Zweck der Berufung
if (typeof window !== 'undefined')
Ich sah es in JSPM-plugin-css, und einigen anderen Bibliotheken.
- für den Autor der code, und wie verwendet, es fragt: "bin ich in der Ausführung in Chrom oder node.js?"... dieses raffinierte hybrid-code funktioniert in "beide" Orte javascript läuft. </Sarkasmus>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine idiomatische überprüfen, um zu sehen, ob das Skript ausgeführt wird, in eine web-Seite in einem web-browser oder nicht.
Könnte man davon ausgehen, dass JavaScript läuft nur im web-Seiten, wie das ist, was es ursprünglich für entworfen, aber das ist nicht wahr: JavaScript ist eine vielseitige Sprache, die kann auch verwendet werden, für das schreiben von server-seitigen code in Node.js oder IIS' Active Server Pages (seit 1996!), oder innerhalb "web-worker", die Skripte für web-Seiten, die im hintergrund laufen.
In eine Webseite, es gibt mehrere systeminterne Objekte, wie
window
andere Umgebungen (wie Node.js) nicht habenwindow
aber vielleicht haben andere Objekte wieconsole
(gut,console
jetzt existiert in den meisten Browsern nun, es war aber nicht ursprünglich).Zum Beispiel, in verschiedenen Kontexten verschiedene Objekte sind in dem Skript die globalen Gültigkeitsbereich (diese Liste ist nicht erschöpfend):
Math
undDate
Object
,Number
,Function
,String
usw (Objekte, die built-in Typen), etc<script>
- tags):Window
(interface) ausgesetzt ist als derwindow
Globale Objekt, das auch das Objekt, das ist globalen Bereich (so deklarierenvar foo
im globalen Bereich entsteht tatsächlich eine Eigenschaftwindow.foo
!)document
global-Objekt ist eigentlich Zugriff auf diewindow.document
Eigenschaft.window
Globale Objekt noch Eigenschaften wiedocument
odernavigator
, aber Sie bekommen andere Globale Objekte wie:console
process
exports
window
Objekt, also anstelle der globalen scope ist eineWindowOrWorkerGlobalScope
Objekt, welche macht von Objekten, die über Eigenschaften wie:caches
indexedDB
origin
response
(für das schreiben auf den response-stream)request
(für Lesung aus dem eingehenden HTTP-request)Application
undSession
(zum beibehalten von Daten zwischen den Anfragen)WScript
global-Objekt stellt die Funktionen aus dem script host.'undefined'
obwohl Recht? Das ist!==
nicht!=
window
Objekt, zurückgegeben durch dietypeof
Betreiber, wird gleich der string'undefined'
.instanceof
Betreiber, jedochwindow
nicht über einen Prototyp-Konstruktor, so dass Sie nicht ausführen können, einen aussagekräftigen Vergleich mitif( window instanceof ... )
.npm
und angenommen das bezog sich auf die Knoten. Stellt sich heraus, es läuft innerhalbjspm
was anders ist.Dies kann verwendet werden, um zu erkennen, ob code ausgeführt wird in einem typischen browser-Umgebung (z.B. eine Umgebung mit einem browser-DOM), oder in einem anderen JS-Umgebung, da die
window
Objekt existiert in einem typischen browser-JS, aber nicht in so etwas wie node.js oder auch ein webWorker, die in einem browser.Wenn die
window
Objekt nicht vorhanden ist, dannalso den code, den Sie fragte nach:
führt die
if
block, wenn diewindow
Objekt existiert als top-level-variable.In den spezifischen code, der Sie verknüpft ist, ist es zu halten, die Ausführung von browser-gezielte code-Referenzen-DOM-Objekte wie
document
wenn das plugin geschieht in einem nicht-browser-Umgebung.Workers()
kommen? Ich habe nicht gesagt, nichts überWorkers()
.window
Objekt. Das allein kann Ihnen sagen, ob eine DOM-und es ist relevant, Objekte wahrscheinlich vorhanden (vs. node.js wo es Sie noch nicht), aber es kann Ihnen nicht sagen, alles, was Sie wollen über Ihre Umgebung wissen. Einige andere Dinge in der Umwelt erfordern möglicherweise andere tests (die waren nicht Gegenstand der Frage). Und, in der spezifische code verwiesen wird, wird es verwendet, um zu entscheiden, wenn das DOM kann verwendet werden.