2012-04-17 4 views
3

В чем разница между: if((typeof OA != 'undefined') && OA) и if(OA)?разница между: if ((typeof OA! = 'Undefined') && OA) и if (OA)

Бывшее заявление работает; последний спокойно останавливает выполнение текущей функции.

(возможно новобранец вопрос)

Спасибо!

+2

Не могли бы вы предоставить еще какой-нибудь контекст? Оба утверждения по существу одинаковы, но второй не удастся, если 'OA' даже не объявлен (т. Е.' Var OA; '). Вы никогда не должны находиться во второй ситуации, всегда объявляйте переменные (если они не являются именами параметров функции). –

+1

@FelixKling: Я думаю, что здесь проблема. –

+1

@Rocket: Вероятно ... это просто кажется странным ... думаю, я не видел такой код в то время;) И использование JSHint действительно помогает тоже ... –

ответ

4

if(OA) не работает, если OA не был определен. typeof OA != 'undefined' проверяет, определено ли значение OA.

var OA; 
if(OA){ 
} 

Это работает.

if(OA){ 
} 

Это не работает: OA is not defined.

typeof OA != 'undefined' && OA проверяет, если он определен, прежде чем пытаться получить доступ к переменному

+1

+1, вероятно, стоит отметить, что 'undefined' является false-y, и ваш первый пример не проверяет« null », он проверяет« undefined ». Кажется, люди смущены. Не определено не то же самое, что и тип 'undefined'. – Marc

0

компилятора обыкновению пытаться оценить OA упаковывает TYPEOF, где, как и в его пытается оценить, если (ОА)

0
if ((typeof OA != 'undefined') && OA) 

Это будет первым проверьте, определена ли переменная OA. Если да, то он будет передан в логическое и оценивается.

if(OA) 

Это предполагает OA существует и сразу же отбрасывает его логическое и оценивает его.

Второй пример вызовет исключение javascript, если переменная OA никогда не была объявлена ​​- первый пример позволяет избежать этого.

См. my answer here для более подробного объяснения нескольких значений undefined в javascript.

+0

Проделайте проверку дважды с помощью try {} catch() {}, чтобы узнать: ReferenceError: OA не определен. Таким образом, «неопределенный», который может вызвать исключение во время выполнения, не является «неопределенным», который считается ложным в логических операциях. Ясно, что я новичок, но почему существует тонкая разница? – user1279175

+0

http://stackoverflow.com/questions/10098816/is-variable-set-defined-issue/10099267#10099267 – jbabey

Смежные вопросы