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

Я не спрашиваю, является ли переменная undefined или если она null. Я хочу проверить, существует ли переменная или нет. Это возможно?

Ответ 1

Методы typeof не работают, потому что они не различают, когда переменная не была объявлена ​​вообще и когда переменная объявлена, но не назначена значение или объявлена ​​и установлена ​​равной undefined.

Но если вы попытаетесь использовать переменную, которая не была объявлена ​​в условии if (или в правой части задания), вы получите сообщение об ошибке. Поэтому это должно работать:

var exists = true;
try {
    if (someVar)
        exists = true;
} catch(e) { exists = false; }
if (exists)
   // do something - exists only == true if someVar has been declared somewhere.

Ответ 2

if ('bob' in window) console.log(bob);

Имейте в виду, что даже если вы указали переменную с var, это означало бы ее существование.

Ответ 3

Я использую эту функцию:

function exists(varname){
    try {
        var x = eval(varname);
        return true;
    } catch(e) { return false; }
}

Надеюсь, что это поможет.

Ответ 4

При попытке доступа к переменной, которая не объявлена ​​в контексте, вы увидите, что в сообщении об ошибке указано undefined. Это реальная проверка, которую вы можете выполнить, чтобы увидеть, есть ли переменная, если она определена или не равна нулю.

Ответ 5

Если во время выполнения вам не нужно знать JSLint. Также помните, что инструкции javascript var подняты, поэтому даже если var находится внутри блока if, он все равно будет определен.

Честно говоря, я думаю, что если вы не уверены, определена ли переменная, вы делаете что-то неправильно и должны реорганизовать свой код.

Ответ 6

попробуйте это

var ex=false;
try {(ex=myvar)||(ex=true)}catch(e) {}
alert(ex);

где ex истинно, если объявлено myvar.

рабочий пример: http://jsfiddle.net/wcqLz/

Ответ 7

Я думаю, это зависит от того, что вы хотите сделать с переменной.

Скажем, например, у вас есть библиотека JS, которая будет вызывать функцию, если она была определена, а если нет, то нет. Вероятно, вы уже знаете, что функции являются объектами первого уровня в JS и являются такими переменными.

У вас может возникнуть соблазн спросить сначала, существует ли он, а затем вызвать его. Но вы можете просто завершить попытку вызвать его в блоке try/catch.

Пример кода, который вызывает функцию, если она определена, до и после запуска события:

function fireEvent(event)
{
    try
    {
        willFireEvent(event); // Is maybe NOT defined!
    } catch(e) {}

    //... perform handler lookup and event handling

    try
    {
        hasFiredEvent(event); // Might also NOT exist!
    } catch(e) {}
}

Итак, вместо проверки для переменной, поймите ошибку вместо:

var x;

try
{
    x = mayBeUndefinedVar;
}
catch (e)
{
    x = 0;
}

Является ли это хорошей вещью или нет с точки зрения производительности и т.д., зависит от того, что вы делаете...

Ответ 8

Что вам нужно:

window.hasOwnProperty("varname");

Более безопасный подход может быть:

this.hasOwnProperty("varname");

Зависит от вашего контекста вызова, хотя...