0

在我的控制台中出现“分配中无效的左侧”错误。我在这里缺少语法吗?

if ($images[next] && images[next].loaded = false){
    //stuff
}

每个条件都通过它自己,但在组合时失败。

4

6 回答 6

1

使用双等号进行比较。或者,您可以只写:

var item = $images[next];
if (item && !item.loaded){
}
于 2013-03-10T03:05:04.260 回答
1

它应该是

if ($images[next] && $images[next].loaded == false){
    //stuff
}

或更好

var images = $images[next];
if (images  && images .loaded === false){
    //stuff
}
于 2013-03-10T03:05:20.513 回答
1

使用单一=意味着您正在为变量赋值。对于比较,使用==or===进行严格相等。

于 2013-03-10T03:07:20.003 回答
1

正如每个人都已经告诉过您的那样,您应该使用==(或===) 进行比较。导致错误的原因是赋值运算符=优先级低于布尔&&运算符,与==任何其他比较运算符不同。因此,您的表达式被评估为:

($images[next] && images[next].loaded) = false

括号中的左侧部分将是truefalse。所以这变成了

true = false

或者

false = false

两者都不允许,因为您不能将任何东西分配给布尔值(只能分配给变量或对象属性)。因此会抛出Invalid left-hand side in assignment错误。

当您使用适当的比较运算符时,优先规则会导致它像这样被评估:

$images[next] && (images[next].loaded == false)

这变成true && true, or true && false, or false && false, or false && true, 然后最终变成trueor false, 这是 if 语句所期望的。

于 2013-03-10T03:58:55.623 回答
0

也许平等检查中的“==”而不是“=”会有所帮助

if ($images[next] && images[next].loaded == false)
{
    //stuff
}

有关 javascript 比较运算符的列表,请查看此处

于 2013-03-10T03:12:39.793 回答
0

每个人都会说同样的话:... .loaded = false应该... .loaded == false=是赋值运算符,==是比较运算符..

if (x = someFunction())有时,只要 someFunction() 不返回 false 或抛出错误(就像在您的情况下那样),您就会看到哪个将运行代码块。

如果您有任何问题,请告诉我:)

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators

于 2013-03-10T03:16:11.040 回答