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

时间:2014-04-20 15:08:58

标签: 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
      } 

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

2 个答案:

答案 0 :(得分:4)

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

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

期望分配或函数调用,而是看到表达式

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

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

  

意外的分配表达式

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

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

答案 1 :(得分:0)

http://jshint.com/docs/options/#expr - JSHINT说,Expr警告是放松选择的一部分。所以,如果你写/* jshint expr: true */,它就不会给你警告。但是,你必须知道功能的范围。如果您只是在所有内容上键入此行,它将全局应用此规则。所以,即使你在其他行上犯了错误,jshint也会忽略它。因此,请确保明智地使用它。尝试使用if用于特定功能(我的意思是仅在一个功能内)