这个Javascript代码块中需要为什么()?

时间:2014-11-05 11:13:36

标签: javascript brackets

我知道javascript中有很多陷阱,但我仍然不明白表达式a& 1和(a& 1)之间有什么区别?

以下代码尝试将11(10 base)转换为字符串1101(2 base)

<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>

1 个答案:

答案 0 :(得分:14)

这是因为operator precedence

Addition的优先级高于Bitwise AND。因此,在评估a & 1 + str时,首先评估1 + str,然后评估a & result

使用Grouping Operator我们可以更改评估顺序。因此,在评估(a & 1) + str时,首先评估()a & 1)内的内容result + str进行评估。