2013-04-22 2 views
4

Как я понимаю, предпочтительный способ проверки неопределенных переменных - typeof a === 'undefined'.typeof a == 'undefined' vs typeof a === 'undefined'

Но почему это лучше, чем typeof a == 'undefined'? В каких местах это может провалиться?

+1

@ Jake1164 почему это дубликат? В этом вопросе сравнивается «нуль». –

ответ

8

В этом случае, поскольку typeof всегда будет давать вам строку: это не лучше (и не хуже). Это не имеет практического значения.

В общем, используя === является предпочтительным, поскольку он заставляет вас быть четко о ваших типах и избавляет вас от получать результаты, которые вы не ожидаете, когда правила разрешения типа JavaScript являются неинтуитивными.

+0

+1. Считаете ли вы, что один будет медленнее, чем другой, или двигатели JS знают, что это сравнение строк всегда и оптимизировано? – Bergi

+0

'===' скорее всего будет работать быстрее и займет больше времени, но разница настолько крошечная, что вам не о чем беспокоиться. (По крайней мере, пока вы не будете делать это тысячи раз в цикле). Остерегайтесь преждевременной оптимизации, это корень всего зла. – Quentin

+0

Я не думаю, что вы можете сказать, что строгое равенство предпочтительнее «в целом», поскольку подавляющее большинство кода, которое я видел, использует '=='. В сообществе javascript есть несколько влиятельных людей, которые предпочитают друг друга, но программисты должны изучить разницу и использовать их соответствующим образом. В javascript тип переменной обычно не имеет отношения к делу, это свободно типизированный язык, где '===' может создавать столько сюрпризов, как '==', особенно при работе с DOM, который иногда возвращает значения как строки и другие моменты, как номера. – RobG

3

Потому что typeof будет возвращать только строку, поэтому можно с уверенностью сравнить две строки с ==.

1

Существует большая разница между == и === (Check out here)

Но, так как TypeOf будет всегда возвращенная строка, это нормально, чтобы использовать это.

5

Разница между == и === является то, что == выполняет Например, 1 будет == до '1', но не === до '1'. Причина, по которой этот подход является предпочтительным, когда вы проверяете undefined, является то, что в JavaScript есть известные подводные камни сравнения.

Наиболее распространенный:

''  == '0'   //false 
0   == ''   //true 
0   == '0'   //true 
false  == 'false'  //false 
false  == '0'   //true 
false  == undefined  //false 
false  == null   //false 
null  == undefined  //true 
" \t\r\n" == 0    //true 

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

В этом конкретном случае это не повлияет на результат. Используете ли вы typeof a == 'undefined' или typeof a === 'undefined', результат будет таким же, без ошибок. Это потому, что typeof возвращает строку. Однако операция будет быстрее, поэтому у вас будет незначительное увеличение производительности.

+0

+1 для ответа на вопрос * и * тщательный. ;-) – RobG

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