2014-02-24 65 views
0

看到這個代碼:什麼是在JS中使用的「&=」?

var bFormValid = true; 
var bValidData = true; 

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

bFormValid &= bValidData; 

任何想法行bFormValid &= bValidData;是幹什麼的?我從來沒有見過像這樣的&= ...

+2

這相當於'bFormValid = bFormValid&bValidData;' – mah

+2

【爲了您的書籤收藏。](http://www.ecma-international.org/ecma-262/5.1/) – Pointy

+0

@Pointy哇...這是很多信息來排序通過 – FastTrack

回答

7

就像foo += 5相當於foo = foo + 5,foo &= bar相當於foo = foo & bar

&,當然是bitwise AND operator(不要與布爾運算符&&混淆)。

舉例來說:

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

它是按位&賦值運算符。它將變量的值和表達式的值設置爲按位與運算的結果。 Link

3

正如其他人所說,該運算符執行按位與運算。還有一點要注意,在特定的代碼,是它開始與布爾值,並與結束:

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;