2013-04-22 87 views
4

据我所知,检查未定义变量的首选方式是typeof a === 'undefined'typeof a =='undefined'vs typeof a ==='undefined'

但为什么它比typeof a == 'undefined'更好呢?在哪些地方可以失败?

+1

@ Jake1164它为什么重复?在这个问题上与“空白”相比较。 – 2013-04-22 11:20:01

回答

8

在这种情况下,因为typeof总是会给你一个字符串:它不会更好(也不会更糟糕)。它没有实际的区别。

一般,使用===是首选,因为它强制您明确表达您的类型,并且避免您获得JavaScript类型解析规则不直观的结果。

+0

+1。你认为一个会比另一个慢吗?或者JS引擎知道它总是比较字符串并优化? – Bergi 2013-04-22 11:21:28

+0

'==='可能会运行得更快,需要更长时间才能下载,但差别非常小,所以不应该担心。 (至少直到你在循环中做了几千次)。谨防过早优化,它是万恶之源。 – Quentin 2013-04-22 11:22:52

+0

我不认为你可以说严格的平等是“一般”的首选,因为绝大多数我见过的代码都使用'=='。在JavaScript社区中有一些比较有影响力的人比其他人更喜欢,但是需要程序员去了解差异并适当地使用它们。在JavaScript中,变量的类型通常是不相关的,它是一种松散类型的语言,其中'==='可以产生与== ==相同的惊喜,特别是在使用DOM时有时返回值作为字符串和其他时间数字。 – RobG 2013-04-22 11:49:29

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 2013-04-22 12:17:36