逻辑和作业

时间:2015-12-01 18:51:34

标签: javascript

我想在var avar b之间进行逻辑AND,并将结果分配给var a

我知道如何使用按位AND:a &= b 但是,我没有10,而是truefalse(即逻辑而不是按位)。我可以在javascript中执行此操作吗?



var boolArr1 = [true, true, true];
var boolArr2 = [true, true, false];

var res1 = true;
var res2 = true;

boolArr1.forEach(i => res1 &= i);
boolArr2.forEach(i => res2 &= i);

document.write("res1 = "+res1); //should write true instead of 1
document.write("<br>");
document.write("res2 = "+res2); //should write false instead of 0
&#13;
&#13;
&#13;

NB。我知道我可以a = a && b

4 个答案:

答案 0 :(得分:2)

没有相同的单一(组合)运算符a = a && b

你可以稍微修改你的代码以达到你想要的并没有完全使用这个结构,但实际上它只是隐藏在函数调用和结果之后:

&#13;
&#13;
var boolArr1 = [true, true, true, null, true];
var boolArr2 = [true, true, false];

var res1 = boolArr1.reduce((prev, cur) => prev && cur, true);
var res2 = boolArr2.reduce((prev, cur) => prev && cur, true);

document.write("res1 = "+res1); // writes true
document.write("<br>");
document.write("res2 = "+res2); // writes false
&#13;
&#13;
&#13;

要记住的另一点是没有进行类型转换。 &&运算符求值为运算符两侧的值之一,其中第一个值可以转换为false,如果不是则转换为秒。

答案 1 :(得分:1)

var boolArr1 = [true, true, true];
var boolArr2 = [true, true, false];

var res1 = true;
var res2 = true;

boolArr1.forEach(i => res1 &= i);
boolArr2.forEach(i => res2 &= i);

document.write("res1 = "+ Boolean(res1)); //should write true instead of 1
document.write("<br>");
document.write("res2 = "+ Boolean(res2)); //should write false instead of 0

答案 2 :(得分:0)

&=的结果是一个整数,它是每位二进制and操作。

根本不能对{3}操作使用布尔值。

检查这个:

&=

如果您指的是布尔值,则必须始终使用var a = 1; // 001b var b = 2; // 010b a &= b; // 001b & 010b = 0 console.log(a); // 0

作为a = a && b;,我建议遵循单行程序:

is all elements of array is truthy

答案 3 :(得分:0)

我建议将Array.prototype.every()Boolean结合使用。

var boolArr1 = [true, true, true],
    boolArr2 = [true, true, false];

document.write('boolArr1: ' + boolArr1.every(Boolean));
document.write('<br>');
document.write('boolArr2: ' + boolArr2.every(Boolean));