In case this doesn't work in your browser.
Outlines how binary flags work.
var alive = parseInt('0001', 2);
var kicking = parseInt('0010', 2);
var alive_kicking = parseInt('0011', 2);
var dead = parseInt('0100', 2);
// removing a flag
alive_kicking & ~alive; // kicking
alive_kicking & ~kicking; // alive
// adding flag
alive | kicking; // alive and kicking
// adding already existing flag
alive_kicking | alive; // still alive and kickin
// checking 'has flag'
// alive and kicking has alive?
alive_kicking & alive;
// alive kicking has dead?
alive_kicking & dead;
1: var alive = parseInt('0001', 2);
+ alive: 1
2: var kicking = parseInt('0010', 2);
+ kicking: 2
3: var alive_kicking = parseInt('0011', 2);
+ alive_kicking: 3
4: var dead = parseInt('0100', 2);
+ dead: 4
5:
6: // removing a flag
7: alive_kicking & ~alive; // kicking
=> 2
8: alive_kicking & ~kicking; // alive
=> 1
9:
10: // adding flag
11: alive | kicking; // alive and kicking
=> 3
12:
13: // adding already existing flag
14: alive_kicking | alive; // still alive and kickin
=> 3
15:
16: // checking 'has flag'
17:
18: // alive and kicking has alive?
19: alive_kicking & alive;
=> 1
20:
21: // alive kicking has dead?
22: alive_kicking & dead;
=> 0