什么是“& =”用于JS?

时间:2014-02-24 17:49:55

标签: javascript

请参阅此代码:

var bFormValid = true;
var bValidData = true;

if(x < y){
    bValidData = false;
}

bFormValid &= bValidData;

bFormValid &= bValidData;正在做什么的任何想法?我从来没有见过&=那样......

4 个答案:

答案 0 :(得分:7)

就像foo += 5相当于foo = foo + 5foo &= bar相当于foo = foo & bar

&当然是bitwise AND operator(不要与布尔AND运算符&&混淆)。

举例来说:

var a = 5,  // 5 is '101' in binary, or 101b for short
    b = 6,  // 6 is 110b
    result;

result = a & b;      // set 'result' to the result of the binary
                     // operation '101b AND 110b'
console.log(result)  // => 4 ('100' in binary)

a &= b;          // set 'a' to the result of '101b AND 110b'
console.log(a);  // => 4 (same as before, but we changed 'a' instead of
                 //       assigning the result to another variable)

这适用于JavaScript中的大多数运算符:

var foo = 6; // 110b

foo |= 9;  // foo = 110b OR 1001b - 'foo' is now 15 (1111b)
foo -= 5;  // foo = foo - 5       - 'foo' is now 10
foo /= 2;  // foo = foo / 2       - 'foo' is now 5
foo %= 3;  // foo = foo % 3       - 'foo' is now 2

但它不适用于布尔运算符:

var bar = true;

bar ||= false;
// => SyntaxError: Unexpected token =

答案 1 :(得分:4)

这是“augmentedassignment operator

bFormValid &= bValidData;

相当于

bFormValid = bFormValid & bValidData;

&这里是bitwise AND operator

答案 2 :(得分:3)

正如其他人所说,该运算符执行按位AND运算。另外需要注意的是,特别是该代码,它以布尔值开头,最后以数字结束:

var bFormValid = true;
var bValidData = true;

if(x < y){
    bValidData = false;
}

bFormValid &= bValidData;

在该序列的最后,变量“bFormValid”将为零或一, truefalse。那有关系吗?好吧,也许,也许不是。如果它真的是布尔值:

bFormValid = !!(bFormValid & bValidData);

或者,它可以是数字:

var bFormValid = 1;
var bValidData = 1;

if(x < y){
    bValidData = 0;
}

bFormValid &= bValidData;

答案 3 :(得分:1)

这是按位&amp;赋值运算符。它设置对变量值和表达式值的按位AND运算的结果。 Link