我正在使用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语句。它假定如果不使用表达式的结果,则它可能不应该是表达式。