我很清楚类似的问题,但我仍然无法以此为基础解决我的问题。
所以,我的代码看起来像这样:
Pporders::with(['product' => function($q) use($id) {
$q->where('user_id', $id);
}])->get();
JSHint在char 39中返回错误,因此在for (var e, i = 0; e = formErrors[i]; i += 1)
之后使用;
。我该怎么办?
答案 0 :(得分:6)
JSHint警告你一个潜在的错误。期望for
语句的第二部分是布尔表达式。通常情况下,您可以使用其中一个比较运算符(==
,===
,!=
,>
等。)。由于表达式为e = formErrors[i]
,它看起来很轻,可能是一个错误,可能是由于缺少等号。这是一个常见的拼写错误,会导致很多错误。
显然,在这种情况下,它不是一个错误,而是故意使用任何experssion评估某事的事实,并且赋值表达式evalutaes到指定的值:
var x;
alert(x = 1);

因此for
语句实际上为e
赋予了一个新值,但也将该值作为条件计算,如果需要将其转换为布尔值。
你可以重构你的代码,使它分配值和使用一个满足JSHint的转换操作,并使代码对读者更明显:
for (var e, i = 0; !!(e = formErrors[i]); i += 1)
第二个!
(直接位于(e...
前面的那个)导致一个转换为布尔值,但也会否定它,第一个!
会恢复这个否定。
答案 1 :(得分:2)
这只是编写循环的一种非常奇怪的方式。 JsHint需要一个布尔表达式("条件"),并判断你的作业是错误的,你实际上想要进行比较(==
而不是=
)。
你应该做的是切换到以下常见的数组迭代习语:
for (var i = 0; i < formErrors.length; i += 1) {
var e = formErrors[i];
…
(对于不包含虚假值的非稀疏formErrors
数组,其工作原理与原始代码相同。)
或者,如果你想编写非惯用代码,请转储jshint: - )
答案 2 :(得分:0)
e = formErrors [i]是一项任务,你不想要条件吗?在这种情况下,在i = 0之后使用逗号,否则在分号后添加条件。
答案 3 :(得分:0)
多德!你错过了一两个等号:
此:
for (var e, i = 0; e == formErrors[i]; i += 1)
或者
for (var e, i = 0; e === formErrors[i]; i += 1)
虽然我相信'e'总是未定义,所以'for'将循环遍历数组,而formErrors [i]未定义。
答案 4 :(得分:0)
通常,for循环中的中间元素是用于决定是否继续循环的条件。你有一个作业,如果你想要一个条件你应该使用e === formErrors[i]
(或使用双=
,但通常不推荐这样做。
赋值在技术上可以起作用,因为e可以是,例如,某个对象(true)或null(false)。但这通常被认为是糟糕的编码风格,并且不会为非常易读的代码做出贡献。