在我的控制台中出现“分配中无效的左侧”错误。我在这里缺少语法吗?
if ($images[next] && images[next].loaded = false){
//stuff
}
每个条件都通过它自己,但在组合时失败。
在我的控制台中出现“分配中无效的左侧”错误。我在这里缺少语法吗?
if ($images[next] && images[next].loaded = false){
//stuff
}
每个条件都通过它自己,但在组合时失败。
使用双等号进行比较。或者,您可以只写:
var item = $images[next];
if (item && !item.loaded){
}
它应该是
if ($images[next] && $images[next].loaded == false){
//stuff
}
或更好
var images = $images[next];
if (images && images .loaded === false){
//stuff
}
使用单一=
意味着您正在为变量赋值。对于比较,使用==
or===
进行严格相等。
正如每个人都已经告诉过您的那样,您应该使用==
(或===
) 进行比较。导致错误的原因是赋值运算符=
的优先级低于布尔&&
运算符,与==
任何其他比较运算符不同。因此,您的表达式被评估为:
($images[next] && images[next].loaded) = false
括号中的左侧部分将是true
或false
。所以这变成了
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
, 然后最终变成true
or false
, 这是 if 语句所期望的。
也许平等检查中的“==”而不是“=”会有所帮助
if ($images[next] && images[next].loaded == false)
{
//stuff
}
有关 javascript 比较运算符的列表,请查看此处
每个人都会说同样的话:... .loaded = false
应该... .loaded == false
。=
是赋值运算符,==
是比较运算符..
if (x = someFunction())
有时,只要 someFunction() 不返回 false 或抛出错误(就像在您的情况下那样),您就会看到哪个将运行代码块。
如果您有任何问题,请告诉我:)
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators