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

Проверка наличия переменной в javascript

Я знаю, что существует два способа определить, существует ли переменная, а не null (false, empty) в javascript:

1) if ( typeof variableName !== 'undefined' && variableName )

2) if ( window.variableName )

который является более предпочтительным и почему?

4b9b3361

Ответ 1

Объявляется переменная, если доступ к имени переменной не приведет к созданию ReferenceError. Если выражение typeof variableName !== 'undefined' будет false только в одном из двух случаев:

  • переменная не объявлена ​​(т.е. в области нет var variableName) или
  • объявлена ​​переменная и ее значение равно undefined (т.е. значение переменной не определено)

В противном случае сравнение оценивается как true.

Если вы действительно хотите проверить, объявлена ​​ли переменная или нет, вам нужно catch any ReferenceError, созданное путем обращения к ней:

var barIsDeclared = true; 
try{ bar; }
catch(e) {
    if(e.name == "ReferenceError") {
        barIsDeclared = false;
    }
}

Если вы просто хотите проверить, не объявлено ли значение объявленной переменной ни undefined, ни null, вы можете просто протестировать его:

if(variableName !== undefined && variableName !== null) { ... }

Или, что то же самое, с нечеткой проверкой равенства с null:

if(variableName != null) { ... }

Как ваш второй пример, так и ваше правое выражение в операции && проверяют, является ли значение "ложным", т.е., если оно принудительно приближается к false в булевом контексте. Такие значения включают null, false, 0 и пустую строку, не все из которых вы можете отказаться.

Ответ 2

Важно отметить, что 'undefined' является вполне допустимым значением для удерживаемой переменной. Если вы хотите проверить, существует ли вообще переменная,

if (window.variableName)

является более полной проверкой, так как он проверяет, что переменная действительно определена. Однако это полезно только в том случае, если переменная гарантирована как объект! Кроме того, как отмечали другие, это может также вернуть значение false, если значение variableName имеет значение false, 0, '' или null.

Тем не менее, этого обычно недостаточно для наших повседневных целей, поскольку мы часто не хотим иметь значение undefined. Таким образом, вы должны сначала проверить, что переменная определена, а затем утверждать, что она не является undefined, используя оператор typeof, который, как указал Адам, не вернет undefined, если переменная действительно не является undefined.

if ( variableName  && typeof variableName !== 'undefined' )

Ответ 3

Если вы хотите проверить, определена ли переменная (например, v) и не равна нулю:

if (typeof v !== 'undefined' && v !== null) {
    // Do some operation  
}

Если вы хотите проверить все значения фальши, такие как: undefined, null, '', 0, false:

if (v) {
   // Do some operation
}

Ответ 4

Я пишу ответ только потому, что у меня недостаточно репутации, чтобы прокомментировать принятый ответ от apsillers. Я согласен с его ответом, но

Если вы действительно хотите проверить, не указана ли переменная, вам нужно будет уловить ReferenceError...

- не единственный способ. Можно сделать только:

this.hasOwnProperty("bar")

чтобы проверить, существует ли переменная bar, объявленная в текущем контексте. (Я не уверен, но вызов hasOwnProperty также может быть более быстрым/эффективным, чем создание исключения) Это работает только для текущего контекста (не для всей текущей области).

Ответ 5

if ( typeof variableName !== 'undefined' && variableName )
//// could throw an error if var doesnt exist at all

if ( window.variableName )
//// could be true if var == 0

////further on it depends on what is stored into that var
// if you expect an object to be stored in that var maybe
if ( !!window.variableName )
//could be the right way

best way => see what works for your case

Ответ 6

if (variable) может использоваться, если переменной гарантированно является объект, или если false, 0 и т.д. считаются значениями по умолчанию (что эквивалентно значению undefined или null).

typeof variable == 'undefined' может использоваться в тех случаях, когда указанный null имеет четкое значение для неинициализированной переменной или свойства. Эта проверка не будет выбрана, а переменная переменной не объявлена.

Ответ 7

Я нашел это короче и намного лучше:

    if(varName !== (undefined || null)) { //do something }

Ответ 8

В других случаях вам приходится иметь дело с ним как исключение ReferenceError.

    try {
          //user variable
           console.log(varName);
    }catch(error){
         //variable is not defined
         console.log(error);
    }