Проверка наличия переменной в javascript
Я знаю, что есть два метода, чтобы определить, существует ли переменная, а не null (false, empty) в javascript:
1) if ( typeof variableName !== 'undefined' && variableName )
2) if ( window.variableName )
какой из них более предпочтительный и почему?
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 (variable)
может использоваться, если переменная гарантированно является объектом, или если false, 0 и т. д. считаются значениями "по умолчанию" (следовательно, эквивалентными undefined или null).
typeof variable == 'undefined'
может использоваться в тех случаях, когда указанное значение null имеет определенное значение для неинициализированной переменной или свойства. Эта проверка не будет бросать и ошибка переменная не объявлена.