Javascript 在JS中,(a===b==c)和((a==b)&;(a==c)&;&;(b==c))是否相同//对不起我的无知

Javascript 在JS中,(a===b==c)和((a==b)&;(a==c)&;&;(b==c))是否相同//对不起我的无知,javascript,Javascript,我的目标是“在只有a、b和c相等时执行代码”。 我算出了两个密码: 代码#1: 代码#2: 我尝试了这两种方法,并意识到只有“代码#2”能够响应我的目的(仅当3个变量相等时执行(例如a=b=c), 但对于“代码#1”,只要有两个等效变量(例如a=b或b=c),它就会执行 我的问题是:“代码1和代码2之间的区别是什么?”你实际上要问的问题是这两个是否相同: if (a === b === c) {...} if ((a === b) && (b === c) &&

我的目标是“在只有a、b和c相等时执行代码”。 我算出了两个密码:

代码#1:

代码#2:

我尝试了这两种方法,并意识到只有“代码#2”能够响应我的目的(仅当3个变量相等时执行(例如
a=b=c
), 但对于“代码#1”,只要有两个等效变量(例如
a=b
b=c
),它就会执行


我的问题是:“代码1和代码2之间的区别是什么?”

你实际上要问的问题是这两个是否相同:

if (a === b === c) {...}
if ((a === b) && (b === c) && (a === c)) {...}
简而言之,它们不是。第一个可以概括为:

if ((a === b) === c) {...}
如果a和b相等,则其计算结果为

if (true === c) {...}
这与检查三者是否相等不同。
要检查三种方式是否相等,必须手动检查所有侧面:

if ((a === b) && (b === c)) {...}  

我将尝试解释差异。解释第一个代码示例:

if (a=b=c) {console.log('something')};
// Code above means: if (c) {console.log('something')};
// So if Boolean(c) is false, console.log will not work
解释第二个例子:

if ( (a=b)&&(a=c)&&(b=c) ) {console.log('something')};
// Code above means: if (b && c && c) {console.log('something')};
// So if Boolean(c) or Boolean(b) is false, console.log will not work

赋值运算符根据其右操作数的值为其左操作数赋值,并返回其右操作数的值。

真值表的时间到了……最后两列是要比较的表达式

A       | B     | C     | A == B    | (A == B) == C | A == B && B == C
--------+-------+-------+-----------+---------------+-----------------
TRUE    | TRUE  | TRUE  | TRUE      | TRUE          | TRUE
TRUE    | TRUE  | FALSE | TRUE      | FALSE         | FALSE
TRUE    | FALSE | TRUE  | FALSE     | FALSE         | FALSE
TRUE    | FALSE | FALSE | FALSE     | TRUE          | FALSE
FALSE   | TRUE  | TRUE  | FALSE     | FALSE         | FALSE
FALSE   | TRUE  | FALSE | FALSE     | TRUE          | FALSE
FALSE   | FALSE | TRUE  | TRUE      | TRUE          | FALSE
FALSE   | FALSE | FALSE | TRUE      | FALSE         | TRUE

不!它们不一样。

c标志是什么意思?我很确定这并不是你认为的意思。查找“=”和“=”之间的区别。然后,在Javascript中,“==”代码#2有一个冗余的比较:只要检查a==b&&b==c是否为enough@Almo:即使对于
a==b==c
,这仍然不是他(可能)认为的意思。我投票以离题结束这个问题,因为作者不明白他在问什么。唯一的“正确”答案回答了实际问题,但不是我认为问题的意图。注意
==
是可传递的,所以
(a===b)和&(b==c)
enough@Cimbali说得好,我没有想到这一点,而是盲目地遵循问题提出的风格。我可以指定多少种方式来声明a、b和c不相等?不确定我是否理解你的要求?如果你愿意,你可以创建无数的逻辑运算组合。(a==(b==c))意思是a、b和c是相等的。如果我希望a、b和c不相等,我可以用多少种方式编码呢?好的,他终于把问题编辑成我们认为他是什么意思。所以这个答案不再是他想要的了。尽管尝试得很好。:)
if ( (a=b)&&(a=c)&&(b=c) ) {console.log('something')};
// Code above means: if (b && c && c) {console.log('something')};
// So if Boolean(c) or Boolean(b) is false, console.log will not work
A       | B     | C     | A == B    | (A == B) == C | A == B && B == C
--------+-------+-------+-----------+---------------+-----------------
TRUE    | TRUE  | TRUE  | TRUE      | TRUE          | TRUE
TRUE    | TRUE  | FALSE | TRUE      | FALSE         | FALSE
TRUE    | FALSE | TRUE  | FALSE     | FALSE         | FALSE
TRUE    | FALSE | FALSE | FALSE     | TRUE          | FALSE
FALSE   | TRUE  | TRUE  | FALSE     | FALSE         | FALSE
FALSE   | TRUE  | FALSE | FALSE     | TRUE          | FALSE
FALSE   | FALSE | TRUE  | TRUE      | TRUE          | FALSE
FALSE   | FALSE | FALSE | TRUE      | FALSE         | TRUE