2015-12-01 87 views
2

我想做一个逻辑与var avar b之间并分配结果var a逻辑与分配

我知道如何与按位做到这一点: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

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

+0

这能否帮助:http://stackoverflow.com/questions/11283366/javascript-logical-operators-and-results – LGSon

回答

2

没有等效的单一(组合)运算符0123'。

,可以稍微修改代码以实现你想要的它并不完全使用此结构,但实际上,它只是隐藏其背后的函数调用和结果:

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

还有一点要记住的是,没有类型转换正在完成。 &&运营商评估为运营商任一侧的其中一个值,其中第一个可以转换为false,否则转换为第二个值。

+0

'VAR RES1 = boolArr1.every(I =>我);'在这种情况下更具可读性。 –

+0

@vp_arth - 我不明白与这个问题有什么关系。问题是关于'&&',我的答案试图解决这个问题。如果意图是测试所有的值都是真的,那么你是正确的,但问题应该修改。 – Amit

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
结果的 &=

0

是一个整数,它是位的每比特的二进制and操作。

你完全不能使用&=操作布尔值。

检查这一点:

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我建议跟着一行代码:

arr.every(b => b) 
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));