位操作
JavaScript中的數字都按照IEEE-754(Institute of Electrical and Electronics Engineers)標準以64位格式儲存。在位操作中,數字被轉換為有符號32位格式。每次運算子會直接操作該32位數以得到結果。雖然需要轉換,但這個過程與JavaScript其他數學運算和布林操作相比要快很多。
- Bitwise AND 按位與
兩個運算元的對應位都是1時,則在該位置返回1。
- Bitwise OR 按位或
兩個運算元的對應位只要一個為1時,則在該位返回1。
- Bitwise XOR 按位異或
兩個運算元的對應位只有一個為1,則在該位返回1。
- Bitwise NOT 按位取反
遇0則返回1,反之亦然。
顏色交替
32位數字的二進位制底層表示,偶數的最低位是0,奇數的最低位是1。如果此數為偶數,和1按位與的結果是0;如果此數為奇數,和1按位與的結果是1。可以使用該方法實現顏色交替,效率可能會比純數學運算(如,取模)快50%。
for (let i = Things.length - 1; i >= 0; i--) {
if(i & 1) {
className = 'oddColor';
}else {
className = 'evenColor';
}
}
複製程式碼
位掩碼
位掩碼用於處理同時存在多個布林選項的情形。使用單個數字的每一位來判定選項是否成立,從而有效地把數字轉換為由布林值標記組成的陣列。掩碼中的每個選項的值都等於2的冪。
const OPTION_A = 1;
const OPTION_B = 2;
const OPTION_C = 4;
const options = OPTION_A | OPTION_B;
// 選項A是否在options中
if(options & OPTION_A) {
// code here
}
// 選項A是否在options中
if(options & OPTION_B) {
// code here
}
// 選項A是否在options中
if(options & OPTION_C) {
// code here
}
複製程式碼