web-dev-qa-db-de.com

Wie kann man richtig prüfen, ob eine globale Variable existiert?

JSLint übergibt dies nicht als gültigen Code:

/* global someVar: false */
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}

Was ist der richtige Weg?

56
Ebrahim Byagowi
/*global window */

if (window.someVar === undefined) {
    window.someVar = 123456;
}

if (!window.hasOwnProperty('someVar')) {
    window.someVar = 123456;
}
77
bigoldbrute
/**
 * @param {string} nameOfVariable
 */
function globalExists(nameOfVariable) {
    return nameOfVariable in window
}

Es spielt keine Rolle, ob Sie eine globale Variable mit var foo oder window.foo erstellt haben - Variablen, die mit var im globalen Kontext erstellt wurden, werden in window geschrieben.

13
gvlasov

Wenn Sie eine globale Variable nur zuweisen möchten, wenn sie noch nicht vorhanden ist, versuchen Sie Folgendes:

window.someVar = window.someVar || 'hi';

oder

window['someVar'] = window['someVar'] || 'hi';
11
mrak

versuchen

variableName in window

oder

typeof window[variableName] != 'undefined'

oder

window[variableName] !== undefined

oder

window.hasOwnProperty(variableName)
8
gion_13

Ich denke das ist eigentlich ein Problem mit JSLint. Es wird der folgende Fehler ausgegeben:

Unerwarteter Typ. Vergleiche direkt mit 'undefined'.

Ich glaube, das ist ein schlechter Rat. In JavaScript ist undefined eine globale Variable, die normalerweise nicht definiert ist. In einigen Browsern können Skripte diese jedoch wie folgt ändern: window.undefined = 'defined'. In diesem Fall kann ein direkter Vergleich mit undefined zu unerwarteten Ergebnissen führen. Glücklicherweise erlauben aktuelle ECMA 5-kompatible Browser keine Zuweisungen zu undefined (und lösen im strikten Modus eine Ausnahme aus).

Ich bevorzuge typeof someVar === "undefined", wie Sie geschrieben haben, oder someVar in window wie Susei vorschlug.

8
bfavaretto
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}

prüft, ob someVar (lokal oder global) undefiniert ist.

Wenn Sie nach einer globalen Variablen suchen möchten, können Sie diese verwenden

if(window['someVar'] === undefined) {
    ...
}

vorausgesetzt, dies ist in einem Browser :)

5
Vatev

bfavaretto ist falsch.

Wenn Sie das globale undefined auf einen Wert setzen, werden die Tests von Objekten gegen undefined nicht geändert. Versuchen Sie dies in Ihrer bevorzugten JavaScript-Konsole Ihres Browsers:

var udef; var idef = 42;
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".
window.undefined = 'defined';
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".

Dies liegt einfach daran, dass JavaScript alle und alle Werte ignoriert, die für die undefinierte Variable festgelegt werden sollen.

window.undefined = 'defined';
alert(window.undefined); // Alerts "undefined".
2
Michael

Dies wäre eine einfache Möglichkeit, die Prüfung durchzuführen.

Diese Prüfung würde jedoch fehlschlagen, wenn variableName deklariert und mit dem boolean value: false

if(window.variableName){

}
1
Prem Anand