防止javascript首先计算对象属性

防止javascript首先计算对象属性,javascript,Javascript,我正在创建一个国际象棋游戏,并具有以下代码行: void (!selectedPiece.moved && selectedPiece.moved = true); 它所做的是检查selectedPiece.moved是否为false,如果为false,则继续并将selectedPiece.moved设置为true 正如@Klaycon所说,它是这样读的: void (!selectedPiece.moved && selectedPiece.moved) =

我正在创建一个国际象棋游戏,并具有以下代码行:

void (!selectedPiece.moved && selectedPiece.moved = true);
它所做的是检查selectedPiece.moved是否为false,如果为false,则继续并将selectedPiece.moved设置为true

正如@Klaycon所说,它是这样读的:

void (!selectedPiece.moved && selectedPiece.moved) = true;

那就是当我得到一个无效的左侧赋值时。我知道我可以用if语句替换它,但我想知道是否还有其他方法可以修复它。

只需添加一些括号。外部的是不必要的

void !selectedPiece.moved && (selectedPiece.moved = true);
甚至更短的方法在第一部分使用逻辑OR,而不使用逻辑NOT

void selectedPiece.moved || (selectedPiece.moved = true);
但无论如何,如果该值是布尔值,则可以不经过检查就指定true

selectedPiece.moved = true;

澄清一下,问题不在于JavaScript在编写时评估属性,而在于简单的操作顺序。目前它的评估结果就像你写的一样!selectedPiece.moved&&selectedPiece.moved=true,因此左侧赋值无效。