请参阅此代码:
var bFormValid = true;
var bValidData = true;
if(x < y){
bValidData = false;
}
bFormValid &= bValidData;
行bFormValid &= bValidData;
正在做什么的任何想法?我从来没有见过&=
那样......
答案 0 :(得分:7)
就像foo += 5
相当于foo = foo + 5
,foo &= 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)
这是“augmented”assignment 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”将为零或一,不 true
或false
。那有关系吗?好吧,也许,也许不是。如果它真的是布尔值:
bFormValid = !!(bFormValid & bValidData);
或者,它可以是数字:
var bFormValid = 1;
var bValidData = 1;
if(x < y){
bValidData = 0;
}
bFormValid &= bValidData;
答案 3 :(得分:1)
这是按位&amp;赋值运算符。它设置对变量值和表达式值的按位AND运算的结果。 Link