短路运算写法疑问:为何i.highlighted=false赋值语句无法生效?
为什么短路运算的这种写法会报错?
你遇到的问题核心是运算符优先级导致的语法错误。
在JavaScript里,逻辑与&&的优先级比赋值运算符=要高,所以你写的这段代码:
i.thirdParty.goodreads.rating < 4.2 && i.highlighted = false;
会被JS引擎解析成:
(i.thirdParty.goodreads.rating < 4.2 && i.highlighted) = false;
左边的(条件 && i.highlighted)是一个表达式,它的结果是一个值(要么是i.highlighted的当前值,要么是条件不满足时的false),而赋值运算符=的左边必须是一个可被赋值的“左值”(比如对象属性、变量这类可以存储值的引用),显然表达式的结果不是左值,所以JS会直接抛出语法错误。
再看你能正常运行的第二种写法:
i.highlighted = i.thirdParty.goodreads.rating < 4.2 && false;
这里赋值运算符=的优先级最低,所以会先计算右边的条件 && false,得到结果后再赋值给i.highlighted,这完全符合语法规则。
如果想要用&&短路的方式直接执行赋值操作,给赋值语句加个括号就能解决优先级问题:
i.thirdParty.goodreads.rating < 4.2 && (i.highlighted = false);
内容的提问来源于stack exchange,提问作者Chen Ching
相关产品推荐
相关产品推荐

