2011-05-17 63 views
2

我有followiing的JavaScript如果在.asp頁的條件:的JavaScript如果條件幫助

<%@language="javascript"%> 

var operator = new String("opstr") 
operator.permissions = 2 

if((operator.permissions & 1) == 1) 
    // ... 
if((operator.permissions & 2) == 2) 
    // ... 

能有人請解釋什麼是在如果上述條件發生了什麼?

謝謝。

回答

3

在這段特定的代碼中,第二個if語句將始終運行。這是因爲operator.permissions & 2將始終評估爲2(因爲之前將該變量設置爲2)。

&是一個按位AND2是二進制的是10(在32位中它將是0000 0000 0000 0000 0000 0000 0000 0010)。當您按位執行AND時,值將被轉換爲二進制(帶符號的32位大端),並且一個操作數的每個位都是AND。當AND兩個相等的值時,您會得到與結果相同的值。

幾個例子(我使用的是4位值這裏閱讀):

1 & 1 = 0001 & 0001 = 0001 = 1 
2 & 1 = 0010 & 0001 = 0000 = 0 
3 & 1 = 0011 & 0001 = 0001 = 1 
... 
5 & 1 = 0101 & 0001 = 0001 = 1 

,並

1 & 2 = 0001 & 0010 = 0000 = 0 
2 & 2 = 0010 & 0010 = 0010 = 2 
3 & 2 = 0011 & 0010 = 0010 = 2 
... 
6 & 2 = 0110 & 0010 = 0010 = 2 
4

Read the MDC article on Bitwise Operators

if((operator.permissions & 1) == 1)

逐位等於。 1 & 1 === 12 & 1 === 03 & 1 === 1

if((operator.permissions & 2) == 2)

另一個逐位等於1 & 2 === 02 & 2 === 23 & 2 === 2