【问题标题】:Why does JSLint tell me to use "=== undefined" instead of "typeof ... === 'undefined'"?为什么 JSLint 告诉我使用“=== undefined”而不是“typeof ... === 'undefined'”?
【发布时间】:2012-09-27 18:43:09
【问题描述】:

我编写了以下代码:

showTitles = (typeof showTitles !== 'undefined') ? showTitles : 'Y';
showSelectGroup = (typeof showSelectGroup !== 'undefined') ? showSelectGroup : 'Y';

但是 JSLint 说:

警告 3 JS Lint:意外的“typeof”。使用 '===' 直接与 undefined 进行比较。

我应该如何更改我的代码?

【问题讨论】:

  • 我对 jslint 一无所知,但我认为它在告诉你这样做:(showtitles === undefined)。
  • 它在消息中说:Use '===' to compare directly with undefined。
  • Unexpected 'typeof' 是问题所在,而不是 !==。
  • 你最好写var showTitles = showTitles || 'Y';

标签: javascript jquery jslint


【解决方案1】:

可能通过使用

showTitles = (showTitles === undefined) ? 'Y' : showTitles;
showSelectGroup = (showSelectGroup === undefined) ? 'Y' : showSelectGroup;

jslint 对此没有任何问题(假设 showTitles 和 showSelectGroup 是用 var 声明的)

但是,我会把它写成

var showTitles = showTitles || 'Y';
var showSelectGroup = showSelectGroup || 'Y';

【讨论】:

    【解决方案2】:

    请注意,这是否是一般的最佳实践是有争议的,但如果你想让它与 JSLint 一起工作,你可以这样做

    showTitles = (showTitles !== undefined) ? showTitles : 'Y';
    

    【讨论】:

    • @Marilou 如果您使用严格比较,则不会。话虽如此,我会鼓励对此进行研究并决定是否要为自己做一些事情,而不是盲目地遵循 JSLint 的“建议”。
    • 但是如果你想测试一个变量是否被定义,你必须使用typeof。然而 JSLint 仍然抱怨它。很烦人。
    • @mattacular 你可以简单地使用上下文。 this.aVariableThatMightBeUndefined === undefined.
    • 如果你需要测试一个全局变量的存在你必须使用typeof。
    • @Alex Turpin 那么正确的方法是 window['variableWhichImTesting'] === undefined
    【解决方案3】:

    此消息反映了最新的最佳做法。在 ES5 严格模式下,undefinedcan no longer be changed 的全局值和直接比较是更简单的代码和更快的速度。总之,JSLint is aware of all this,给你很好的建议。

    在这种情况下,将typeof showTitles !== 'undefined' 更改为showTitles === undefined。

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多