Как я понимаю, предпочтительный способ проверки неопределенных переменных - typeof a === 'undefined'
.typeof a == 'undefined' vs typeof a === 'undefined'
Но почему это лучше, чем typeof a == 'undefined'
? В каких местах это может провалиться?
Как я понимаю, предпочтительный способ проверки неопределенных переменных - typeof a === 'undefined'
.typeof a == 'undefined' vs typeof a === 'undefined'
Но почему это лучше, чем typeof a == 'undefined'
? В каких местах это может провалиться?
В этом случае, поскольку typeof
всегда будет давать вам строку: это не лучше (и не хуже). Это не имеет практического значения.
В общем, используя ===
является предпочтительным, поскольку он заставляет вас быть четко о ваших типах и избавляет вас от получать результаты, которые вы не ожидаете, когда правила разрешения типа JavaScript являются неинтуитивными.
+1. Считаете ли вы, что один будет медленнее, чем другой, или двигатели JS знают, что это сравнение строк всегда и оптимизировано? – Bergi
'===' скорее всего будет работать быстрее и займет больше времени, но разница настолько крошечная, что вам не о чем беспокоиться. (По крайней мере, пока вы не будете делать это тысячи раз в цикле). Остерегайтесь преждевременной оптимизации, это корень всего зла. – Quentin
Я не думаю, что вы можете сказать, что строгое равенство предпочтительнее «в целом», поскольку подавляющее большинство кода, которое я видел, использует '=='. В сообществе javascript есть несколько влиятельных людей, которые предпочитают друг друга, но программисты должны изучить разницу и использовать их соответствующим образом. В javascript тип переменной обычно не имеет отношения к делу, это свободно типизированный язык, где '===' может создавать столько сюрпризов, как '==', особенно при работе с DOM, который иногда возвращает значения как строки и другие моменты, как номера. – RobG
Потому что typeof
будет возвращать только строку, поэтому можно с уверенностью сравнить две строки с ==
.
Существует большая разница между ==
и ===
(Check out here)
Но, так как TypeOf будет всегда возвращенная строка, это нормально, чтобы использовать это.
Разница между ==
и ===
является то, что ==
выполняет Например, 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
возвращает строку. Однако операция будет быстрее, поэтому у вас будет незначительное увеличение производительности.
+1 для ответа на вопрос * и * тщательный. ;-) – RobG
@ Jake1164 почему это дубликат? В этом вопросе сравнивается «нуль». –