Есть ли хороший простой способ проверить, имеет ли переменная в Javascript значение? - PullRequest
3 голосов
/ 02 декабря 2011

Я хочу проверить это:

if ( typeof myVar != "undefined" && myVar != null )
    ...

Другими словами, я хочу проверить, имеет ли переменная определенное значение (включая 0 или пустую строку), но не неопределенное или нулевое, которое яистолковывать как ничего не стоящее.

Нужно ли каждый раз выполнять проверку, состоящую из двух частей, или есть удобный ярлык?

Ответы [ 5 ]

4 голосов
/ 02 декабря 2011

Если вы хотите разрешить 0 и "" в качестве допустимых значений и хотите охватить регистр переменной, может даже не быть удален, но не считать null действительным значением, тогда вы должны специально проверитьдля undefined и null вот так:

if (typeof myVar !== 'undefined' && myVar !== null) 
   ...

Многие значения не соответствуют действительности (они не удовлетворяют if (myVar), поэтому вам действительно нужно осознанно решить, какие из них вы тестируете.Все это ложь:

undefined
false
0
""
null
NaN

Если вы хотите разрешить одни, но не другие, то вам нужно выполнить более конкретный тест, чем if (myVar), как я показал выше, чтобы выделить только значениявас волнует.

Вот хорошая запись значений Falsey: http://www.sitepoint.com/javascript-truthy-falsy/.

Если вы знаете, что переменная объявлена, и вы просто хотите увидеть, была ли она инициализирована с чем-то отличным от нуля, вы можете использовать это:

if (myVar != undefined) 
   ...

Использование только != вместо !== позволяет проверять как неопределенные, так и нулевые с помощью преобразования типов. Хотя я бы не рекомендовал это, потому что если выпытаешься будуМежду значениями Falsey, вероятно, лучше НЕ позволять движку JS вообще выполнять какие-либо преобразования типов, чтобы вы могли точно контролировать, что он делает, без необходимости запоминать все правила равенства преобразования типов.Я хотел бы придерживаться этого, чтобы быть более явным:

if (typeof myVar !== 'undefined' && myVar !== null) 
   ...

Если вы хотите знать, имеет ли оно какое-либо не-ложное значение, вы, конечно, можете сделать это (но это не позволит 0или "" в качестве допустимых значений:

if (myVar) 
   ...
2 голосов
/ 02 декабря 2011

Метод из 2-х частей.Если вы сначала не проверите typeof, вы получите ошибку ссылки.

1 голос
/ 02 декабря 2011

Если вам известен контекст из myVar , вы сможете сделать это:

if (this.myVar != null) {
    ...
}
0 голосов
/ 02 декабря 2011

Ну, null - это определенное значение ... поэтому, если вы хотите убедиться, что переменная не содержит null и не является неопределенной, вы должны выполнить обе проверки.

0 голосов
/ 02 декабря 2011

если myvar может быть неопределенным, то вызов его без проверки typeof приведет к ошибке.

И если он определен как null (как myvar = element.lastChild для элемента без дочерних элементов), вы пропуститепоймать его, если вы просто используете typeof.

...