Javascript 为什么我能';不能同时比较3个阵列?

Javascript 为什么我能';不能同时比较3个阵列?,javascript,arrays,Javascript,Arrays,我有三个数组,分别是a、b和c 我比较它们以检查它们的相同索引是否具有相同的值 如果我像这样比较,它就不起作用了 for (var i = 0; i < 3; i++) { if (a[i] === b[i] === c[i]) { console.log("Matched") } } for(变量i=0;i

我有三个数组,分别是
a
b
c

我比较它们以检查它们的相同索引是否具有相同的值

如果我像这样比较,它就不起作用了

 for (var i = 0; i < 3; i++) {
    if (a[i] === b[i] === c[i]) {
     console.log("Matched")
    }
 }
for(变量i=0;i<3;i++){
如果(a[i]==b[i]==c[i]){
控制台日志(“匹配”)
}
}
但如果我真的喜欢这个,它就行了

for (var i = 0; i < 3; i++) {
   if (a[i] === b[i] && a[i] === c[i] && b[i] === c[i]) {
      console.log("Matched")
    }
 }
for(变量i=0;i<3;i++){
如果(a[i]==b[i]&&a[i]==c[i]&&b[i]==c[i]){
控制台日志(“匹配”)
}
}
那么,为什么呢


因为。。。。这就是布尔逻辑的工作方式

顺便说一句,如果
中有一个多余的检查


如果
a==b
b==c
那么,根据定义
a==c
,因为
a[i]==b[i]==c[i]
没有做你认为应该做的事情:它被解释为

(a[i]==b[i])==c[i]

然后根据第一个比较结果将其转换为
true===c[i]
false===c[i]

var a=[1,2,3];
VarB=[1,2,3];
var c=[1,真,3];
对于(变量i=0;i<2;++i){
如果(a[i]==b[i]==c[i]){
log('在索引处找到匹配:'+i);
}

}
您正在解释的布尔逻辑不是这样工作的。您的第一个逻辑被解释为:
(a[i]==b[i])===c[i]
。这就是为什么新的工作

a=[1,2,3],b=[1,2,3],c=[1,2,3];
对于(变量i=0;i<3;i++){
如果(a[i]==b[i]==c[i]){
控制台日志(“匹配”)
}
否则{
控制台日志(“错误”);
}

}
当您从
==
中删除一个
=
时,会发生一些有趣的事情

a=[1,2,3],b=[1,2,3],c=[1,2,3];
对于(变量i=0;i<3;i++){
如果(a[i]==b[i]==c[i]){
控制台日志(“匹配”)
}
}
//在代码中匹配的

a[i]===b[i]将首先执行

它返回一个布尔值。 然后将这个布尔值与c进行比较,如

true==c

当然是假的

这样写你就能更好地理解它:

(a[i] === b[i])=== c[i]

因为它比较第一个部分,所以将值与下一个部分进行比较。 您必须尝试在第一个零件上使用内支架。或者像第二个例子中那样做。

类似这样的操作:

    (a[i]===(b[i]===c[i]))
    ((a[i]===b[i])===c[i])

因为JavaScript不知道这是您想要做的。它正在按操作顺序执行
a[i]==(b[i]==c[i])
。因此它是
a[i]==true | false
,因为
a[i]==b[i]==c[i]
没有做你认为它应该做的事情,它被解释为
a[i]==(b[i]==c[i])
如果
a[i]==b[i]&a[i]==c[i]
那么
b[i]==c[i]
测试将始终是真的和冗余的,您可以删除它。所有关于将布尔值(真/假)与数组值进行比较的答案在技术上都是正确的。但是还应该提到,javascript解释器必须对代码进行标记,并通过正则表达式对代码进行处理,以评估适当的操作顺序。你不会明白为什么是真的!=c[i]没有学习解释器和编译器。@epascarello,没有,请检查
true==1==1
。真正的表达式类似于
(a[i]==b[i])==c[i]
。但是如果a、b和c是
[0,1,2]
,则不会发生匹配!而a=[0,1,2]和b=[1,1,2]以及c=[0,1,2]将作为相等数组进行计算@如果全部为[0,1,2],则它仍然匹配。但是,这不是最好的匹配方式,因为会出现您刚才提到的bug。您是舒尔@Turnipdabeets吗?我的浏览器会说不,因为0==0为真,0==true为假,并且(0==0==0)的计算结果为假,(1==0==0)返回真。(Firefox)不要误解我@Turnipdabeets,我很感谢你的回答,因为你指出了只需更改比较运算符就可能出现的错误。我只是提出了更多的案例来展示。[顺便说一句,匹配的字符串引用数组的单个索引值,而不是在完整的结构中,使用else分支,这种行为会更清楚]