【问题标题】:typeof a == 'undefined' vs typeof a === 'undefined'typeof a == 'undefined' vs typeof a === 'undefined'
【发布时间】:2013-04-22 11:14:30
【问题描述】:

据我了解,检查未定义变量的首选方法是typeof a === 'undefined'

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

【问题讨论】:

  • @Jake1164 为什么它是重复的?该问题与“null”有比较。

标签: javascript undefined typeof


【解决方案1】:

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

一般中,使用=== 是首选,因为它会强制您明确说明您的类型,并避免在 JavaScript 的类型解析规则不直观时获得意想不到的结果。

【讨论】:

  • +1。你认为一个会比另一个慢,还是 JS 引擎知道它总是一个字符串比较并优化?
  • === 可能会运行得更快并需要更长的下载时间,但差异是如此之小,以至于您不必担心。 (至少在您循环执行数千次之前不会)。提防过早的优化,这是万恶之源。
  • 我认为您不能说“一般”首选严格相等,因为我见过的绝大多数代码都使用==。 javascript 社区中有一些有影响力的人更喜欢其中一种,但程序员要了解差异并适当地使用它们。在 javascript 中,变量的类型通常是无关紧要的,它是一种松散类型的语言,=== 可以产生与== 一样多的惊喜,特别是在使用有时以字符串形式返回值而有时以数字形式返回值的 DOM 时。
  • @Bergi — 在操作数具有相同类型的情况下,===== 执行完全相同的逻辑,因此速度上的任何差异(如果有的话)都是特定的脚本引擎,而不是可靠(或有用)的优化。
【解决方案2】:

===== 的区别在于== 执行转换。因此,例如 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 返回一个字符串。但是,操作会更快,因此您的性能提升可以忽略不计。

【讨论】:

    【解决方案3】:

    因为typeof只会返回字符串,所以用==比较两个字符串是安全的。

    【讨论】:

      【解决方案4】:

      =====有很大区别(Check out here)

      但是,由于 typeof 会总是返回字符串,所以可以使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        相关资源
        最近更新 更多