Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:预期和赋值或函数调用,而不是看到一个表达式_Javascript_Arrays_Object_Jshint - Fatal编程技术网

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

JavaScript:预期和赋值或函数调用,而不是看到一个表达式,javascript,arrays,object,jshint,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('=');

我使用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 str='A=B | C=D'
变量数据={};
var strArr=str.split(“|”);
对于(变量i=0;i

你知道我为什么会出现这样的错误,或者我如何编写代码来删除错误吗。

这里有一个简化版本,给出了相同的警告:

var a, b;
a && (b = a);
应为赋值或函数调用,而不是看到表达式

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

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

意外赋值表达式

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


基本上,jshint/jslint不喜欢滥用逻辑运算符的快捷方式求值来替换if语句。它假设如果表达式的结果没有被使用,它可能不应该是表达式。

-JSHINT说,Expr警告是放松选项的一部分。因此,如果您编写
/*jshint expr:true*/
,它不会向您发出警告。但是,你也必须知道功能的范围。如果您只是在所有内容的顶部键入这一行,它将全局应用此规则。因此,即使您在其他行中犯了错误,jshint也会忽略它。所以,一定要明智地使用它。尝试对特定函数使用if(我的意思是仅在一个函数内)

最后一行你想做什么?在我看来,你是在分配
(数据[a[0].toLowerCase()]=a[1])
而不是比较
(数据[a[0].toLowerCase()]=a[1])
。代码试图解析字符串并将其转换为对象。例如“ABC=XYZ”。预期结果是data.abc=xyz。最后一行看起来很混乱,您可以更清楚地重写它。谢谢。我将左侧拆分为单独的一行,以便在if中进行比较和赋值。如果(a[1]!==null){dataObj[a[0].toLowerCase()]=a[1];}