【问题标题】:Shorthand if statement for property initialization in JavascriptJavascript中属性初始化的简写if语句
【发布时间】:2015-08-19 18:51:08
【问题描述】:

为了使我的代码更简洁,我在一个 javascript 文件中执行以下操作:

var _weight;

function getWeight(){
    _weight || InitializeWeight();

    // do some stuff

    return _weight;
}

function InitializeWeight(){
    _weight = 3;
}

JSHint 在像这些 "_weight || InitializeWeight()" 之类的速记语句上抛出错误

预期的是赋值或函数调用,但看到的是表达式。

所以我检查它是否未定义,调用这个方法。

这真的错了吗?效果很好。

如何在不让 JSHint 对我产生影响的情况下编写此语句?

【问题讨论】:

  • 你的意思是把_weight = _weight || InitializeWeight()
  • 你为什么要在你的代码中写这样的速记。花几个额外的字符并使用if 语句。让 minifiers 处理速记。
  • 表达式返回结果。运行表达式而不使用其结果是可疑的。如果您在 JS 代码中看到以下行:1 + 2;,您首先会想到什么?
  • 您的代码是有效的 Javascript。 JSHint 对此发出警告,因为在不使用其值的情况下编写布尔表达式看起来很可疑。
  • JSHint 不知道调用 InitializeWeight() 只是因为它的副作用。大多数时候,如果你写了这样的语句,那是因为你忘记了赋值。像 JSHint 和 JSLint 这样的工具的目的是帮助你发现这些类型的错误。

标签: javascript validation jshint shorthand-if


【解决方案1】:

您可以使用expr 选项:

/*jshint expr: true */

var _weight;

function getWeight(){
    _weight || InitializeWeight();

    // do some stuff

    return _weight;
}

function InitializeWeight(){
    _weight = 3;
}

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多