据我所知,检查未定义变量的首选方法是typeof a === 'undefined'
。
但为什么它比typeof a == 'undefined'
更好?它可以在哪些地方失败?
答案 0 :(得分:9)
在这种情况下,由于typeof
总会给你一个字符串:它不是更好(也不是更糟)。它没有实际意义。
在常规中,首选使用===
是因为它会强制您明确您的类型,并使您无法获得JavaScript的类型解析规则不直观时您不期望的结果。
答案 1 :(得分: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
返回一个字符串。但是,操作速度会更快,因此性能提升可以忽略不计。
答案 2 :(得分:3)
因为typeof
只返回字符串,所以将两个字符串与==
进行比较是安全的。
答案 3 :(得分:1)
==
和===
之间存在很大差异(Check out here)
但是,由于typeof 总是返回字符串,所以可以使用它。