我知道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>
答案 0 :(得分:14)
Addition的优先级高于Bitwise AND。因此,在评估a & 1 + str
时,首先评估1 + str
,然后评估a & result
。
使用Grouping Operator我们可以更改评估顺序。因此,在评估(a & 1) + str
时,首先评估()
(a & 1
)内的内容result + str
进行评估。