Javascript 试图理解React JS示例中使用的逻辑运算符(a&;a===b&;a===C)

Javascript 试图理解React JS示例中使用的逻辑运算符(a&;a===b&;a===C),javascript,reactjs,logical-operators,Javascript,Reactjs,Logical Operators,请有人解释一下上面的例子。 当你把它改成(a==b==C)时会发生什么。 我一直试图在reactjs.org中更好地理解这一逻辑,尽管它工作得很好,但在我的脑海中,逻辑是如何工作的还不清楚 从React教程复制的示例代码 ` 函数计算器(正方形){ 常量行=[ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; //警报(行数、长度); for(设i=0;i

请有人解释一下上面的例子。 当你把它改成(a==b==C)时会发生什么。 我一直试图在reactjs.org中更好地理解这一逻辑,尽管它工作得很好,但在我的脑海中,逻辑是如何工作的还不清楚

从React教程复制的示例代码

`

函数计算器(正方形){
常量行=[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
//警报(行数、长度);
for(设i=0;i
`

来自ReactJS.org

JavaScript的
if
语句(和其他流控制结构)强制值(如果它们还不是布尔值)。线路

if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
将三个表达式与
和&
连接在一起,对它们执行逻辑AND运算。这三种表达方式是:

  • squares[a]
  • squares[a]==squares[b]
  • squares[a]==squares[c]
&
只需要两个操作数(两边的操作数),让我们称它们为
x
y
x&&y
)。它对
x
进行求值,如果该结果是错误的,则ª将该结果作为
&
结果;否则,它计算
y
,并将其作为
&
结果:

设x=0;
设y=2;
console.log(x&&y);//0-`x`是falsy,因此该值就是结果
x=1;

console.log(x&&y);//2-`x`是真实的,因此对`y`进行了计算,该值就是结果
JavaScript的
if
语句(和其他流控制结构)强制值,如果它们还不是布尔值。线路

if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
将三个表达式与
和&
连接在一起,对它们执行逻辑AND运算。这三种表达方式是:

  • squares[a]
  • squares[a]==squares[b]
  • squares[a]==squares[c]
&
只需要两个操作数(两边的操作数),让我们称它们为
x
y
x&&y
)。它对
x
进行求值,如果该结果是错误的,则ª将该结果作为
&
结果;否则,它计算
y
,并将其作为
&
结果:

设x=0;
设y=2;
console.log(x&&y);//0-`x`是falsy,因此该值就是结果
x=1;
console.log(x&&y);//2-'x'是真实的,因此对'y'进行了计算,该值就是结果
在上面的陈述中,平方[a]应该等于平方[b]和平方[c],并且应该是真实值

真实价值观:

如果将其更改为
square[a]===square[b]===square[c]
,则它将首先比较前两个,结果布尔值将与
square[c]

例如,如果

square[a] = 1;
square[b] = 1;
square[c] = 1;
然后首先计算
square[a]===square[b]
,返回
true
。然后将计算
true===square[c]
,该值将返回'false'

在上面的陈述中,平方[a]应该等于平方[b]和平方[c],并且应该是真实值

真实价值观:

如果将其更改为
square[a]===square[b]===square[c]
,则它将首先比较前两个,结果布尔值将与
square[c]

例如,如果

square[a] = 1;
square[b] = 1;
square[c] = 1;

然后首先计算
square[a]===square[b]
,返回
true
。然后将计算
true===square[c]
,该值将返回`false。

foo====bar===baz
并不意味着“如果foo、bar和baz是相同的。”

它首先计算表达式的第一部分,因此可以这样考虑:

(foo === bar) === baz
foo===bar
的计算结果是什么?
true
false
。因此它要么变成
true===baz
要么变成
false===baz


另一方面,foo===bar&&foo===baz的意思是“如果foo、bar和baz是相同的。”

foo===bar==baz
并不意味着“如果foo、bar和baz是相同的。”

它首先计算表达式的第一部分,因此可以这样考虑:

(foo === bar) === baz
foo===bar
的计算结果是什么?
true
false
。因此它要么变成
true===baz
要么变成
false===baz


另一方面,
foo===bar&&foo===baz
的意思是“如果foo、bar和baz是相同的。”

如果您不了解逻辑门(即&&&、| |),请首先阅读它们,或者如果您知道并理解上面提到的逻辑

if(正方形[a]&正方形[a]==正方形[b]&正方形[a]==正方形[c])

难道你不容易理解这个逻辑然后试着理解下面的逻辑它的工作原理和上面的一样

if(正方形[a]==正方形[b]&正方形[b]==正方形[c])


可能会有帮助。

如果您对逻辑门(即&&&,| | |)不了解,请先阅读它们,或者如果您知道和上面提到的逻辑

if(正方形[a]&正方形[a]==正方形[b]&正方形[a]==正方形[c])

难道你不容易理解这个逻辑然后试着理解下面的逻辑它的工作原理和上面的一样

if(正方形[a]==正方形[b]&正方形[b]==正方形[c])

也许会有帮助。

我发现
(正方形[a]&(正方形[a]==正方形[b])&&(正方形[a]==正方形[c])
这将是一个好主意
(squares[a]) && (squares[a] == squares[b]) && (squares[a] == squares[c])