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分支,这种行为会更清楚]