若第一个条件为true,则在javascript中为变量赋值,左侧引用错误无效赋值

若第一个条件为true,则在javascript中为变量赋值,左侧引用错误无效赋值,javascript,Javascript,我正在努力做到这一点 index==5&&index=6; index是一个定义的变量,如果它的值为5,则应该为它指定一个值6,但它给出了一个错误ReferenceError:invalid assignment left-side,这在php中有效。我知道其他方法,但这种行为背后的原因是什么,但它不是一种好的风格 index == 5 && (index = 6); 这差不多就是。使用括号: index&&(index=6); 这一点并不明

我正在努力做到这一点

index==5&&index=6;

index是一个定义的变量,如果它的值为5,则应该为它指定一个值6,但它给出了一个错误ReferenceError:invalid assignment left-side,这在php中有效。我知道其他方法,但这种行为背后的原因是什么,但它不是一种好的风格

index == 5 && (index = 6);
这差不多就是。使用括号:

index&&(index=6);

这一点并不明显,这是避免这种伎俩的一个重要原因。如果,请选择一个好的旧
,这样任何人都可以立即解析您的代码(代码质量工具会警告您这一点)。

赋值运算符
=
的运算符优先级非常低。因此,您的表达式被解析为

(index == 5 && index) = 6
可以将赋值运算符括起来:

index == 5 && (index = 6);
您还可以重写该语句,以便将来的程序员能够更容易地理解您的意图:

if (index == 5) index = 6;
检查运算符优先级的简单方法是查看规范。较低优先级的运算符在规范中比较高优先级的运算符描述得更深入。Mozilla网站上也有一个