是什么原因导致了这种奇数OR和三进制输出[Javascript]



嘿,所以我的OR和三元运算有问题。我这里有这个代码。

console.log(this.state.records)
Before: {
AllowCheck: "1"
Checked: "0"
}
const records = this.state.records.map((record) => {
return {
...record,
Checked: checked || record.AllowCheck === '0' ? '1' : '0',
}
});
console.log(records)
After: { 
AllowCheck: "1"
Checked: "1"
}

当您在三元操作之前查看日志时,您会发现该对象有一个名为"AllowCheck"的属性。您可以在这里看到,它在记录中的求值结果为1。如果您查看下面的函数,您将看到一个在记录列表上迭代的映射操作。变量"checked"来自Change操作上的一个复选框,在这种情况下该复选框将评估为true。在OR运算中,您可以看到"checked"将为true,右侧的三进制是"record.AllowCheck"将从之前计算为1的位置。由于"record.AllowCheck"为1,因此三进制应产生0。您将在after对象中看到Checked等于1。我不知道为什么它不等于";"已检查";变量,我真的不明白它怎么等于1。我是不是错过了什么?我看这个太久了吗?任何意见或答案都将不胜感激,谢谢。

由于"record.AllowCheck"是1 ,因此三进制应产生0

没有。这个三元运算中的条件不是你认为的(record.AllowCheck === '0'(。它实际上是checked || record.AllowCheck === '0',由于checked是真的,它在第一步短路,总体上计算为真,这就是三元运算符计算为'1'的方式。

有关详细信息,请参阅操作员优先级表:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#table

最新更新