JSHint - 期望一个条件表达式,而不是一个赋值
JSHint -Expected a conditional expression and instead saw an assignment
我很清楚类似的问题,但我仍然无法根据这些解决我的问题。
因此,我的代码如下所示:
for (var e, i = 0; e = formErrors[i]; i += 1)
JSHint returns 表示 char 39 有错误,所以在 formErrors[i]
之后加上 ;
。我能做什么?
e = formErrors[i] 是一个赋值,你不想要一个条件吗?在这种情况下,在 i=0 之后使用逗号,否则在分号之后添加条件。
通常,for循环中的中间元素是用于决定是否继续循环的条件。你在那里有一个任务,如果你想要一个条件,你应该使用 e === formErrors[i]
(或使用双 =
,但通常不推荐这样做)。
赋值在技术上是可行的,因为 e 可以是例如某个对象 (true) 或 null (false)。但这通常被认为是糟糕的编码风格,并且不会产生非常可读的代码。
JSHint 警告您存在潜在错误。预计 for
语句的第二部分将是一个布尔表达式。通常,您会为此使用一种比较运算符(==
、===
、!=
、>
等)。由于表达式是 e = formErrors[i]
,因此看起来可能是一个错误,可能是由于缺少等号。这是一个常见的错字,会导致很多错误。
显然,在这种情况下,这不是一个错误,而是有意使用这样一个事实,即任何表达式的计算结果都是某个东西,而赋值表达式的计算结果是指定的值:
var x;
alert(x = 1);
因此 for
语句实际上为 e
分配了一个新值,但也将该值作为条件求值,如果需要则将其转换为布尔值。
您可以重构您的代码,使其既分配值 又 使用满足 JSHint 的强制转换操作并使代码对 reader:
for (var e, i = 0; !!(e = formErrors[i]); i += 1)
第二个 !
(直接在 (e...
前面的那个)导致转换为布尔值,但也否定它,第一个 !
恢复这个否定。
这是一种非常奇怪的循环编写方式。 JsHint期望那里有一个布尔表达式("conditional"),并判断你的赋值是错误的,你实际上想要一个比较(==
而不是=
)。
你应该做的是切换到以下常见的数组迭代习惯用法:
for (var i = 0; i < formErrors.length; i += 1) {
var e = formErrors[i];
…
(对于不包含虚假值的非稀疏 formErrors
数组,其工作方式与原始代码相同。)
或者,如果您想编写非惯用代码,转储 jshint :-)
我很清楚类似的问题,但我仍然无法根据这些解决我的问题。
因此,我的代码如下所示:
for (var e, i = 0; e = formErrors[i]; i += 1)
JSHint returns 表示 char 39 有错误,所以在 formErrors[i]
之后加上 ;
。我能做什么?
e = formErrors[i] 是一个赋值,你不想要一个条件吗?在这种情况下,在 i=0 之后使用逗号,否则在分号之后添加条件。
通常,for循环中的中间元素是用于决定是否继续循环的条件。你在那里有一个任务,如果你想要一个条件,你应该使用 e === formErrors[i]
(或使用双 =
,但通常不推荐这样做)。
赋值在技术上是可行的,因为 e 可以是例如某个对象 (true) 或 null (false)。但这通常被认为是糟糕的编码风格,并且不会产生非常可读的代码。
JSHint 警告您存在潜在错误。预计 for
语句的第二部分将是一个布尔表达式。通常,您会为此使用一种比较运算符(==
、===
、!=
、>
等)。由于表达式是 e = formErrors[i]
,因此看起来可能是一个错误,可能是由于缺少等号。这是一个常见的错字,会导致很多错误。
显然,在这种情况下,这不是一个错误,而是有意使用这样一个事实,即任何表达式的计算结果都是某个东西,而赋值表达式的计算结果是指定的值:
var x;
alert(x = 1);
因此 for
语句实际上为 e
分配了一个新值,但也将该值作为条件求值,如果需要则将其转换为布尔值。
您可以重构您的代码,使其既分配值 又 使用满足 JSHint 的强制转换操作并使代码对 reader:
for (var e, i = 0; !!(e = formErrors[i]); i += 1)
第二个 !
(直接在 (e...
前面的那个)导致转换为布尔值,但也否定它,第一个 !
恢复这个否定。
这是一种非常奇怪的循环编写方式。 JsHint期望那里有一个布尔表达式("conditional"),并判断你的赋值是错误的,你实际上想要一个比较(==
而不是=
)。
你应该做的是切换到以下常见的数组迭代习惯用法:
for (var i = 0; i < formErrors.length; i += 1) {
var e = formErrors[i];
…
(对于不包含虚假值的非稀疏 formErrors
数组,其工作方式与原始代码相同。)
或者,如果您想编写非惯用代码,转储 jshint :-)