2014-11-05 38 views
2

我明白在JavaScript中有很多陷阱,但我仍然不明白表達式a和a(& 1)之間有什麼區別?爲什麼()需要在這個Javascript代碼塊中?

以下代碼試圖隱蔽11(10個鹼基)到字符串1101(2個鹼基)

<script> 
var str = ''; 
var a = 11; 
for(var i=0;a;i++){ 
    str = a & 1 + str; // this doesn't work must rewrite as 
    // str = (a & 1) + str; 
    console.log('str = ' + str); 
    a >>>=1; 
} 
console.log(str); 
</script> 
+5

就這麼你知道,有一個內置的:「(11).toString(2)」。 – georg 2014-11-05 11:40:25

回答

14

正是由於operator precedence

Addition具有比Bitwise AND一個更高的優先級。因此,當評估a & 1 + str時,首先評估1 + str,然後評估a & result

使用Grouping Operator我們可以更改評估順序。因此,當評估(a & 1) + str時,首先評估()a & 1)內的內容,然後評估result + str

相關問題