Jslint 错误:需要条件表达式,而是看到分配

Jslint error: Expected a conditional expression and instead saw an assignment

本文关键字:分配 表达式 错误 条件 Jslint      更新时间:2023-09-26

对于此代码:

var i = 0;
for (i < menuitem.length; i += 1;)

JSlint 返回:

期望一个条件表达式,而是看到了一个赋值。

期望一个标识符,而是看到"("。

并拒绝继续扫描。这段代码工作正常,但出了什么问题?我怎么能用"if"语句来写这个?(如果这就是JSLINT的意思(。

谢谢你们的帮助!

是的,JSLint 非常恶毒。正如其他人所指出的,你没有在正确的位置填充东西,但除此之外,JSLint 要求你在 for 循环的初始化部分放一些东西。不过,您可以采取几个选项来使其在不弄乱逻辑的情况下运行良好。我最喜欢的是重置i(即使它已经设置(:

var i = 0;
for (i = 0; i < menuitem.length; i += 1) {
    /** do stuff **/
}

这让 JSLint 满意,并且还确保如果您决定将其用于同一词法范围内的另一个for循环,i将被重置。另一种选择是在那里扔一个null来填充空间(如果您不想重置 i 的值(:

var i = 0;
for (null; i < menuitem.length; i += 1) {
    /** do stuff **/
}

两者都工作得很好,并安抚了一直如此令人担忧的JSLint。但是,没有人会真正关心你是否只是将初始化部分留空(JSLint 除外(。你可以试试JSHint,因为它在这种事情上更宽容一些。

你的for循环有点奇怪,第二部分应该是循环的条件,相反,你有一个作业。

您必须始终按顺序(initialisation; condition; step)零件。

var i = 0;
for (; i < menuitem.length; i += 1)

我只是把你的分号从末尾移到了开头。或者,如果您愿意,可以将变量声明和赋值放在第一部分中。

for (var i = 0; i < menuitem.length; i += 1) {
  // code
}

var i = 0;
for (; i < menuitem.length; i += 1) {
  // code
}

找到了!以下是验证的确切答案:

var i;
for (i = 0; i < menuitem.length; i += 1) {
  // code
}

var 应该在外面说 jslint :s

从你的代码片段中,我将假设我只是一个用于控制循环周期数的变量。正确的代码是

for (var i = 0; i < menuitem.length; i += 1) {
// code
}

这就是标准化的声明和语法 - 至少对于我现在能想到的语言。这就是这种类型的循环的真正意义所在 - for 循环是这样设计的,因此作者可以简单地编写一行代码,而不是如果他/她想做一个 while 循环,可以编写更多代码。