JavaScript:预期和赋值或函数调用,而不是看到一个表达式
我使用JSHint来确保我的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('=');
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];}