据我所知,检查未定义变量的首选方式是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 2013-04-22 11:21:28
'==='可能会运行得更快,需要更长时间才能下载,但差别非常小,所以不应该担心。 (至少直到你在循环中做了几千次)。谨防过早优化,它是万恶之源。 – Quentin 2013-04-22 11:22:52
我不认为你可以说严格的平等是“一般”的首选,因为绝大多数我见过的代码都使用'=='。在JavaScript社区中有一些比较有影响力的人比其他人更喜欢,但是需要程序员去了解差异并适当地使用它们。在JavaScript中,变量的类型通常是不相关的,它是一种松散类型的语言,其中'==='可以产生与== ==相同的惊喜,特别是在使用DOM时有时返回值作为字符串和其他时间数字。 – RobG 2013-04-22 11:49:29
因为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 2013-04-22 12:17:36
@ Jake1164它为什么重复?在这个问题上与“空白”相比较。 – 2013-04-22 11:20:01