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