I have 3 arrays called a
, b
and c
.
I compare them to check if their same indexes has same value.
If i compare like this it doesn't work.
for (var i = 0; i < 3; i++) {
if (a[i] === b[i] === c[i]) {
console.log("Matched")
}
}
But if i do like this, it works.
for (var i = 0; i < 3; i++) {
if (a[i] === b[i] && a[i] === c[i] && b[i] === c[i]) {
console.log("Matched")
}
}
So, Why?
答案 0 :(得分:4)
当您从=
===
时会发生一些有趣的事情
a=[1,2,3],b=[1,2,3],c=[1,2,3];
for (var i = 0; i < 3; i++) {
if (a[i] == b[i] == c[i]) {
console.log("Matched")
}
}
//Matched
有效!但为什么?
这是因为javascript中==
和===
之间存在区别。
===
必须准确无误。就像其他答案一样:a[i] === (b[i] === c[i])
,然后转换为a[i] === true
或a[i] === false
- 意味着它必须字面上是true
或false
,而不仅仅是等同那个。
如果您使用==
,那么它不一定非精确,只需等同于true
或false
,或者我们通常会说truthy
或{ {1}}。
注意:在这种情况下,我不建议将此方法与falsy
一起使用,因为这只是为了说明问题。最好将它们分开并使用==
。如果您尝试其他组合,您会注意到阵列上的匹配项不匹配。那是因为它们匹配===
请参阅此代码:
truthy
现在如果他们的所有内容都是字面a=[0,5,7],b=[1,3,8],c=[0,2,9];
for (var i = 0; i < 3; i++) {
if (a[i] == b[i] == c[i]) {
console.log("Matched")
}
}
而您使用true
怎么办?它也匹配。
===
答案 1 :(得分:3)
a=[1,2,3],b=[1,2,3],c=[1,2,3];
for (var i = 0; i < 3; i++) {
if (a[i] === b[i] === c[i]) {
console.log("Matched")
}
else{
console.log("error");
}
}
&#13;
解释:
a [i] === b [i] //返回布尔值true
或false
true
| false
=== c [i]是false
检查代码。您可以看到其他部分正在运行。
同时检查以下代码
a=true,b=true,c=true;
if(a === b === c){
console.log(a);
}
&#13;
答案 2 :(得分:2)
因为......这就是布尔逻辑的工作方式。
顺便说一句,您在if
中有一项冗余检查。
如果a==b
和b==c
则按照定义a==c
答案 3 :(得分:2)
因为a[i] === b[i] === c[i]
不符合你的想法:它被解释为
<强> (a[i] === b[i]) === c[i]
强>
然后根据第一个比较结果转换为true === c[i]
或false === c[i]
。
var a = [1, 2, 3];
var b = [1, 2, 3];
var c = [1, true, 3];
for (var i = 0; i < 2; ++i) {
if (a[i] === b[i] === c[i]) {
console.log('Match found at index: ' + i);
}
}
答案 4 :(得分:2)
您正在解释的布尔逻辑不能像那样工作。您的第一个逻辑被解释为:(a[i] === b[i]) === c[i]
。这就是为什么新的工作正常!
答案 5 :(得分:2)
:
a [i] === b [i] 将首先执行
它返回一个布尔值。 然后将此布尔值与c进行比较,如
true === c
当然是假的
这样写你可以更好地理解它:
display: flex;
答案 6 :(得分:2)
因为它比较了第一部分,所以将值与下一部分进行比较。 您必须尝试使用内部支架作为第一部分。或者就像你在第二个例子中那样做。
答案 7 :(得分:1)
这样的事情:
(a[i]===(b[i]===c[i]))
((a[i]===b[i])===c[i])