Подтвердить что ты не робот

Каков правильный способ проверить, существует ли глобальная переменная?

JSLint не передает это как действительный код:

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

Каков правильный путь?

4b9b3361

Ответ 1

/*global window */

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

if (!window.hasOwnProperty('someVar')) {
    window.someVar = 123456;
}

Ответ 2

/**
 * @param {string} nameOfVariable
 */
function globalExists(nameOfVariable) {
    return nameOfVariable in window
}

Не имеет значения, была ли создана глобальная переменная с var foo или window.foo - переменные, созданные с помощью var в глобальном контексте, записываются в окно.

Ответ 3

Если вы хотите назначить глобальную переменную, только если она еще не существует, попробуйте:

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

или

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

Ответ 4

Я думаю, что на самом деле это проблема с JSLint. Он выдает следующую ошибку:

Неожиданный 'typeof'. Сравните непосредственно с 'undefined'.

Я считаю, что это плохой совет. В JavaScript undefined - это глобальная переменная, которая, как правило, undefined. Но некоторые браузеры позволяют скриптам изменять его, например: window.undefined = 'defined'. Если это так, сравнение непосредственно с undefined может привести к неожиданным результатам. К счастью, текущие браузеры, совместимые с ECMA 5, не позволяют назначать undefined (и генерируют исключение в строгом режиме).

Я предпочитаю typeof someVar === "undefined", как вы писали, или someVar in window, как предположил Сусей.

Ответ 5

попробуйте

variableName in window

или

typeof window[variableName] != 'undefined'

или

window[variableName] !== undefined

или

window.hasOwnProperty(variableName)

Ответ 6

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

будет проверять, есть ли someVar (локальный или глобальный) undefined.

Если вы хотите проверить глобальную переменную, вы можете использовать

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

Предположим, что это находится в браузере:)

Ответ 7

bfavaretto неверен.

Установка глобального значения undefined в значение не приведет к изменению тестов объектов на undefined. Попробуйте это в любимых браузерах. Консоль JavaScript:

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".

Это связано с тем, что JavaScript игнорирует все и любые значения, которые пытались установить в переменной undefined.

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

Ответ 8

Это был бы простой способ выполнить проверку.

Но эта проверка не сработает, если объявлен variableName и назначен с помощью boolean value: false

if(window.variableName){

}