What does the operator |= do in JavaScript?
a[0] |= b
is basically
a[0] = a[0] | b
"|" is an or bitwise operator
UpdateWhen a[0]
is assigned 0
, a[0]
in binary is 0000
. In the loop,
b = 0
a[0] = 0 (base 10) = 0000 (base 2)b = 0 (base 10) = 0000 (base 2) ---------------a[0] | b = 0000 (base 2) = 0 (base 10)
b = 1
a[0] = 0 (base 10) = 0000 (base 2)b = 1 (base 10) = 0001 (base 2) ---------------a[0] | b = 0001 (base 2) = 1 (base 10)
b = 2
a[0] = 1 (base 10) = 0001 (base 2)b = 2 (base 10) = 0010 (base 2) ---------------a[0] | b = 0011 (base 2) = 3 (base 10)
b = 3
a[0] = 3 (base 10) = 0011 (base 2)b = 3 (base 10) = 0011 (base 2) ---------------a[0] | b = 0011 (base 2) = 3 (base 10)
b = 4
a[0] = 3 (base 10) = 0011 (base 2)b = 4 (base 10) = 0100 (base 2) ---------------a[0] | b = 0111 (base 2) = 7 (base 10)
b = 5
a[0] = 7 (base 10) = 0111 (base 2)b = 5 (base 10) = 0101 (base 2) ---------------a[0] | b = 0111 (base 2) = 7 (base 10)
b = 6
a[0] = 7 (base 10) = 0111 (base 2)b = 6 (base 10) = 0110 (base 2) ---------------a[0] | b = 0111 (base 2) = 7 (base 10)
b = 7
a[0] = 7 (base 10) = 0111 (base 2)b = 7 (base 10) = 0111 (base 2) ---------------a[0] | b = 0111 (base 2) = 7 (base 10)
b = 8
a[0] = 7 (base 10) = 0111 (base 2)b = 8 (base 10) = 1000 (base 2) ---------------a[0] | b = 1111 (base 2) = 15 (base 10)
b = 9
a[0] = 15 (base 10) = 1111 (base 2)b = 9 (base 10) = 1001 (base 2) ---------------a[0] | b = 1111 (base 2) = 15 (base 10)
At the end of the loop the value of a[0]
is 15
As with most assignment operators, it is equivalent to applying the operator using the lefthand value again:
a |= ba = a | b
Just like
a += ba = a + b
Look on Moz Dev Net for more.
[Edit: Brain fail, mixed up | and ||. Need more coffee. Modified below]
Since |
is the Bitwise OR operator, the result of a|b
will be the integer representing the bitstring with all the 1 bits of a
and b
. Note that javascript has no native int or bitstring types, so it will first cast a
and b
to int, then do a bitwise OR on the bits. So 9 | 2 in binary is 1001 | 0010 = 1011, which is 11, but 8|2 = 8.
The effect is to add the flag bits of b
into a
. So if you have some flag WEEVILFLAG=parseInt(00001000,2)
:
// a = parseInt(01100001,2)if(isWeevilish(a)) a |= WEEVILFLAG;// now a = parseInt(01101001,2)
will set that bit to 1 in a.