JavaScript:预期和赋值或函数调用,而是看到一个表达式

HSG*_*HSG 4 javascript arrays object jshint

我正在使用 JSHint 来确保我的 JavaScript 是“严格的”,但出现以下错误:

期望赋值或函数调用,而是看到了一个表达式

在以下代码中:

      var str = 'A=B|C=D'
      var data = {};
      var strArr = str.split( '|' );
      for (var i = 0; i < strArr.length; i++) {
          var a = strArr[i].split('=');
          a[1] && (data[a[0].toLowerCase()] = a[1]);  // Warning from JSHint
      } 
Run Code Online (Sandbox Code Playgroud)

任何想法为什么我会收到这样的错误或我如何编写代码来消除错误。

kap*_*pex 5

这是一个提供相同警告的简化版本:

var a, b;
a && (b = a);
Run Code Online (Sandbox Code Playgroud)

期望赋值或函数调用,而是看到了一个表达式

这意味着您有一个表达式,但没有将结果分配给任何变量。jshint 不关心实际表达式是什么或者有副作用。即使您在表达式内部分配了一些东西,您仍然忽略了表达式的结果。

如果您关心它,jslint 还有另一个错误:

意外的赋值表达式

这会警告您可能希望使用==而不是=内部逻辑表达式。这是一个常见的错误,因此不鼓励您在逻辑表达式中使用赋值(即使这正是您在这里想要的)。

基本上,jshint/jslint 不喜欢滥用逻辑运算符的快捷评估来代替 if 语句。它假设如果不使用表达式的结果,它可能不应该是一个表达式。