【发布时间】:2013-04-22 11:14:30
【问题描述】:
据我了解,检查未定义变量的首选方法是typeof a === 'undefined'。
但为什么它比typeof a == 'undefined' 更好?哪些地方会失败?
【问题讨论】:
-
@Jake1164 为什么它是重复的?该问题与“null”有比较。
标签: javascript undefined typeof
据我了解,检查未定义变量的首选方法是typeof a === 'undefined'。
但为什么它比typeof a == 'undefined' 更好?哪些地方会失败?
【问题讨论】:
标签: javascript undefined typeof
在这种情况下,因为typeof 总是会给你一个字符串:它没有更好(也没有更糟)。没有实际区别。
在一般中,使用=== 是首选,因为它会强制您明确说明您的类型,并避免在 JavaScript 的类型解析规则不直观时获得意想不到的结果。
【讨论】:
=== 可能会运行得更快并需要更长的下载时间,但差异是如此之小,以至于您不必担心。 (至少在您循环执行数千次之前不会)。提防过早的优化,这是万恶之源。
==。 javascript 社区中有一些有影响力的人更喜欢其中一种,但程序员要了解差异并适当地使用它们。在 javascript 中,变量的类型通常是无关紧要的,它是一种松散类型的语言,=== 可以产生与== 一样多的惊喜,特别是在使用有时以字符串形式返回值而有时以数字形式返回值的 DOM 时。
== 和 === 执行完全相同的逻辑,因此速度上的任何差异(如果有的话)都是特定的脚本引擎,而不是可靠(或有用)的优化。
== 和=== 的区别在于== 执行转换。因此,例如 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 返回一个字符串。但是,操作会更快,因此您的性能提升可以忽略不计。
【讨论】:
因为typeof只会返回字符串,所以用==比较两个字符串是安全的。
【讨论】:
==和===有很大区别(Check out here)
但是,由于 typeof 会总是返回字符串,所以可以使用它。
【讨论】: