Как правильно проверить, существует ли глобальная переменная?
JSLint не передает это как допустимый код:
/* global someVar: false */
if (typeof someVar === "undefined") {
var someVar = "hi!";
}
Как правильно?
8 ответов
/*global window */
if (window.someVar === undefined) {
window.someVar = 123456;
}
if (!window.hasOwnProperty('someVar')) {
window.someVar = 123456;
}
/**
* @param {string} nameOfVariable
*/
function globalExists(nameOfVariable) {
return nameOfVariable in window
}
не имеет значения, создали ли вы глобальную переменную с помощью var foo или window.foo-переменные, созданные с помощью var в глобальном контексте, записываются в окно.
Если вы хотите назначить глобальную переменную, только если она еще не существует, попробуйте:
window.someVar = window.someVar || 'hi';
или
window['someVar'] = window['someVar'] || 'hi';
Я думаю, что это на самом деле проблема с JSLint. Он выдаст следующую ошибку:
неожиданный 'typeof'. Сравнивать напрямую с "неопределенным".
Я считаю, что это плохой совет. В JavaScript undefined
глобальная переменная, которая, как правило, не определен. Но некоторые браузеры позволяют скриптам изменять его, например:window.undefined = 'defined'
. Если это так, сравнивая непосредственно с undefined
может привести к неожиданным результатам. К счастью, текущий ECMA 5 совместимый браузеры не позволяют назначатьundefined
(и выдаст исключение в строгом режиме).
предпочитаю typeof someVar === "undefined"
, как вы разместили, или someVar in window
как Susei предложил.
попробовать
variableName in window
или
typeof window[variableName] != 'undefined'
или
window[variableName] !== undefined
или
window.hasOwnProperty(variableName)
if (typeof someVar === "undefined") { var someVar = "hi!"; }
проверит, если someVar
(локальный или глобальный) не определено.
если вы хотите проверить глобальную переменную, вы можете использовать
if(window['someVar'] === undefined) {
...
}
предположим, что это в браузере :)
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 игнорирует все и любые значения, которые пытались установить в неопределенной переменной.
window.undefined = 'defined';
alert(window.undefined); // Alerts "undefined".
Это был бы простой способ выполнить проверку .
но эта проверка провалится, если variableName
объявляется и назначается с boolean value: false
if(window.variableName){
}