2015-09-16 10 views

Antwort

7

Es ist zu testen, ob das Skript in einem Web-Browser ausgeführt wird oder nicht.

In einer Webseite gibt es mehrere innere Objekte, wie window, andere Umgebungen (wie Node.js) nicht window haben, aber vielleicht andere Objekte wie console (na ja, console existiert jetzt in den meisten Browsern jetzt, aber es war ursprünglich nicht).

+0

Es wird immer noch nicht gleich mit der Zeichenfolge "undefined" sein, aber richtig? Das ist '! ==' not '! =' – Blindy

+0

@Blindy Der Typ des 'window' Objektes, wie vom' typeof' Operator zurückgegeben, ist gleich dem String ''undefined''. –

+0

Oh ich sehe, das macht Sinn. Es ist der Typ, nicht das Objekt selbst. – Blindy

6

Dies kann dazu verwendet werden, um zu erkennen, ob Code in einer typischen Browser-Umgebung ausgeführt wird (zB eine Umgebung mit einem Browser DOM) oder in einer anderen JS-Umgebung, da das window Objekt existiert in einem typischen Browser JS, aber existiert nicht in etwas wie node.js oder sogar ein webWorker in einem Browser.

Wenn das window Objekt nicht vorhanden ist, dann

typeof window === 'undefined' 

so dass der Code gefragt Sie:

if (typeof window !== 'undefined') 

den if Block ausgeführt werden, wenn das window Objekt als Top-Level-Variable nicht vorhanden ist .

In dem spezifischen Code, den Sie verknüpft haben, ist es von der Ausführung von Browser-bezogenen Code, der DOM-Objekte wie document verweist, wenn das Plugin zufällig in einer nicht-Browser-Umgebung verwendet wird.

+0

@dandavis - woher kommt dein Kommentar zu 'Workers()'? Ich habe nichts über 'Workers()' gesagt. – jfriend00

+0

@dandavis - Ich verstehe nicht, was der webWorker Code mit dieser Frage zu tun hat. Entschuldigung, aber ich verstehe deinen Kommentar einfach nicht. Dieser Code erkennt das Vorhandensein eines Browser-ähnlichen 'Fenster'-Objekts. Das allein kann Ihnen sagen, ob ein DOM und seine relevanten Objekte wahrscheinlich existieren (im Gegensatz zu node.js, wo dies nicht der Fall ist), aber es kann Ihnen nicht alles sagen, was Sie über Ihre Umgebung wissen möchten. Einige andere Dinge in der Umgebung erfordern möglicherweise andere Tests (die nicht Gegenstand der Frage waren). Und in dem angegebenen spezifischen Code wird entschieden, ob das DOM verwendet werden kann. – jfriend00

+0

ein kleiner Punkt ist, dass nicht alle Browser-JS ein _window_ Top-Level-Objekt, Arbeiter zum Beispiel, aber typisch, du hast Recht;) – dandavis