| AND |
如果兩個位元都是 1 就回傳 1
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number( 9 & 6 ).toString(2) ); // alert 0
alert( Number( 9 & 1 ).toString(2) ); // alert 1
|
| | |
OR |
只要有一個是f 1 結果就是 1
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(1).toString(2) ); // alert 0001
alert( Number( 9 | 6 ).toString(2) ); // alert 1111
alert( Number( 9 | 1 ).toString(2) ); // alert 1001
|
| ^ |
XOR |
兩個一樣為 0 不一樣為 1
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(1).toString(2) ); // alert 0001
alert( Number( 9 ^ 6 ).toString(2) ); // alert 1111
alert( Number( 9 ^ 1 ).toString(2) ); // alert 1000
|
| ~ |
NOT |
把位元變成相反, 1 -> 0, 0 -> 1.
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(1).toString(2) ); // alert 0001
alert( Number( ~9 ).toString(2) ); // alert 0110
alert( Number( ~6 ).toString(2) ); // alert 1001
alert( Number( ~1 ).toString(2) ); // alert 1110
|
| << |
位元左移 |
移動的位元必須在 0 - 31 個, 如果超出 31 就取 31 的餘數
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(-10).toString(2) ); // alert -1010
alert( Number( 9 << 2 ).toString(2) ); // alert 100100
alert( Number( 6 << 3 ).toString(2) ); // alert 110000
alert( Number( -10 << 5 ).toString(2) ); // alert -101000000
|
| >> |
有號位元右移 |
有號就是說位元往右移, 如果原本的數是正號就補 0, 負號就補 1.
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(-10).toString(2) ); // alert -1010
alert( Number( 9 >> 2 ).toString(2) ); // alert 10
alert( Number( 6 >> 3 ).toString(2) ); // alert 0
alert( Number( -10 >> 10 ).toString(2) ); // alert -1
|
| >>> |
無號位元右移 |
和 >> 一樣, 差別是都補 0 |
| in |
撿查屬性是否存在 |
覺得這很有用, 可以先檢查有沒有某個屬性再做動作, 很適合 function 對未知型態的參數做動作之前預先處理以防錯誤發生
function test() {};
alert( 'a' in o ); // true
alert( 'c' in o ); // false
}
|
| == |
傳回是否相等 |
- 如果型態不同, === 回傳 false
- 如果兩個都是數字或字串或布林值且相同則 === 和 == 為 true
- 如果兩個都是 NaN 則 === 和 == 為 false
- 如果一個是 null 一個是 undefined, 則 == 為 true 而 === 為 false
- 如果兩個都是 null 或 undefined 則 == 和 === 為 true
- 如果兩個變數指向同物件, 則 == 和 === 為 true
- 如果兩個變數指向不同物件, 即使是相同型態, === 和 == 還是回傳 false (這比較奇怪, 因為原本我以為同物件, 同值的話 == 就會回傳 true. 但測試結果並非如此)
var a = new String('a');
var b = new String('a');
alert( a == b ); // false
alert( a === b ); // false
- 如果拿字串和數字比, 字串會先轉成數字, 如果轉換過後的數字相同, 則 == 回傳 true 而 === 回傳 false
var a = new String('123');
var b = 123;
alert( a == b ); // true
alert( a === b ); // false
可這裡要注意如果數字也是個物件的話就不能比了
var a = new String('123');
var b = new Number(123);
alert( a == b ); // false
alert( a === b ); // false
- 如果拿布林值和數字比, 則 true 會先變 1, false 會先變 0. 之後才比
var a = true;
var b = 1;
alert( a == b ); // true
a = new Boolean(true);
alert( a == b ); // true
b = new Number(1);
alert( a == b ); // false
- 如果物件和數字或字串做比較, 會先把物件轉成基本型態, 也就是呼叫 valueOf, 如果沒有 valueOf 就呼叫 toString. (只有 Date 物件是先呼叫 toString)
var a = new A();
var b = 'test';
A.prototype.toString = function() {}
alert( a == b ); // true
b = 5;
alert( a == b ); // false
A.prototype.valueOf = function() {}
alert( a == b ); // true
- 使用比較運算子的時候如果用如果和字串或數字比就會先呼叫 valueOf 或 toString 轉成基本型態後才比較
function A() {}
A.prototype.valueOf = function() {}
}
function test() {}
- 如果比較一個字串與數字, 或是物件轉成字串與數字, 比較運算子就會把字串轉成數字比較, 如果無法轉數字就會變 NaN 最後回傳 false. 如果兩個運算元都不能轉數字或字串就回傳 false. 不過注意 Date 拿來比較的時候會呼叫 valueOf.
function TestString() {}
}
function TestNumber() {}
}
function test() {}
alert( a > b ); // 122 > 123 return false
TestString.prototype.valueOf = function() {}
alert( a > b ); // ab => NaN > 123 return false
}
|
| === |
傳回是否相同 |
zBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScripty n n Best Math Test h h Help Best Best Math Test
xBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScriptb Div Cos Irrational