我正在使用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
      }


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

最佳答案

这是给出相同警告的简化版本:

var a, b;
a && (b = a);



  需要一个赋值或函数调用,而是看到一个表达式


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

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


  意外的赋值表达式


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

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

07-24 09:47
查看更多