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


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

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

2) if ( window.variableName )

какой из них более предпочтительный и почему?

7 56

7 ответов:

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

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

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

если вы действительно хотите проверить, объявлена переменная или нет, вам нужно catch любой 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) { ... }

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

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

if (window.variableName)

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

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

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

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

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

if (v) {
   // Do some operation
}

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

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

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

this.hasOwnProperty("bar")

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

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

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

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

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

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