条件中的javascript按位运算

时间:2017-12-10 17:11:42

标签: javascript

我试图理解Javascript中的按位操作是如何工作的,特别是当用作条件结果时。

const number = 19

if(number & 1) {
  console.log('one')
}
if(number & 2) {
  console.log('two')
}
if(number & 4) {
  console.log('four')
}
if(number & 8) {
  console.log('eight')
}
if(number & 16) {
  console.log('sixteen')
}
// one two sixteen

if(number & 1 === 1) {
  console.log('one')
}
if(number & 2 === 2) {
  console.log('two')
}
if(number & 4 === 4) {
  console.log('four')
}
if(number & 8 === 8) {
  console.log('eight')
}
if(number & 16 === 16) {
  console.log('sixteen')
}
// one two four eight sixteen

代码的第一部分产生了一个二十六个,我希望它是。 但是代码的第二部分产生了一个二四四十六。 数字& 4应该是0,它不应该在这里打印出'4',对于'8'也是如此。我在这里误解了什么?

2 个答案:

答案 0 :(得分:3)

您遇到operator precendence问题:===的优先级高于&。因此number & 1 === 1将被评估为number & (1 === 1)

要解决您必须添加适当的分组:

(number & 1) === 1

答案 1 :(得分:2)

根据MDN=== 10 )的优先级值大于& 9 )。这就是19 & 4 === 419 & (4 === 4)处执行的原因。