應用的對象 | 操作 |
---|---|
包含有效數字字符 | 轉換為數字值,再執行 |
不包含有效數字字符 | NaN |
false | 轉換為0,再執行 |
true | 轉換為1,再執行 |
浮點數值 | 執行 |
對象 | 先調用對象的 valueOf() 方法取得值,然后應用上述規則;如果結果是 NaN,再調用 toString() 方法取得值,然后應用上述規則 |
計算二進制補碼的步驟: 1. 求數值絕對值的二進制碼 2. 求二進制反碼 3. 將二進制反碼加 1
ECMAScript 會隱藏上面的信息,以二進制字符串形式輸出負數時,只會在這個負數絕對值的二進制碼前加一個負號:var num = -18;alert(num.toString(2)); //"-10010"默認情況下,ECMAScript 中所有整數都是有符號整數。如果對非數值應用位操作符,會先自動使用 Number() 函數將該值轉換為數值,再進行下一步操作。第一個數的位 | 第二個數的位 | 結果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
第一個數的位 | 第二個數的位 | 結果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
第一個數的位 | 第二個數的位 | 結果 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
操作數 | 結果 |
---|---|
對象 | false |
空字符串 | true |
非空字符串 | false |
0 | true |
非 0 數值(包括 Infinity) | false |
null | true |
NaN | true |
undefined | true |
第一個操作數 | 第二個操作數 | 結果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
操作數類型 | 結果 |
---|---|
第一個操作數是對象 | 返回第二個操作數 |
第二個操作數是對象 | 只有第一個操作數求值結果為 true,才會返回該對象 |
兩個操作數都是對象 | 返回第二個操作數 |
有一個操作數是 null | null |
有一個操作數是 NaN | NaN |
有一個操作數是 undefined | undefined |
第一個操作數 | 第二個操作數 | 結果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
操作數類型 | 結果 |
---|---|
第一個操作數是對象 | 返回第一個操作數 |
第一個操作數是求值結果為 false | 返回第二個操作數 |
兩個操作數都是對象 | 返回第一個操作數 |
有一個操作數是 null | null |
有一個操作數是 NaN | NaN |
有一個操作數是 undefined | undefined |
操作數類型 | 結果 |
---|---|
都是數值 | 常規乘法運算,如果乘積超過表示范圍,則返回 Infinity |
有一個操作數是 NaN | NaN |
Infinity 與 0 相乘 | NaN |
Infinity 與 非 0 數值相乘 | Infinity |
Infinity 與 Infinity 相乘 | Infinity |
有一個操作數不是數值 | 后臺調用 Number() 轉換為數值,在應用上面的規則 |
操作數類型 | 結果 |
---|---|
都是數值 | 常規除法運算,如果商超過表示范圍,則返回 Infinity |
有一個操作數是 NaN | NaN |
Infinity 被 Infinity 除 | NaN |
0 被 0 除 | NaN |
非零的有限數被 0 除 | Infinity |
Infinity 與 非 0 數值除 | Infinity |
有一個操作數不是數值 | 后臺調用 Number() 轉換為數值,再應用上面的規則 |
操作數類型 | 結果 |
---|---|
有一個操作數是 NaN | NaN |
Infinity 加 Infinity | Infinity |
-Infinity 加 -Infinity | -Infinity |
+0 加 +0 | +0 |
-0 加 -0 | -0 |
+0 加 -0 | +0 |
兩個操作數都是字符串 | 第二個與第一個拼接 |
只有一個操作數是字符串 | 另一個字符串轉換為字符串,再拼接 |
有一個操作數是對象、數值或布爾值 | 調用它的 toString() 方法取得字符串值,再按照字符串規則處理;對于nudefined 和 null,則調用 String() 取得 “undefined” 和 “null” |
操作數類型 | 結果 |
---|---|
兩個操作數都是數值 | 常規減法 |
有一個操作數是 NaN | NaN |
Infinity 減 Infinity | NaN |
-Infinity 減 -Infinity | -Infinity |
Infinity 減 -Infinity | Infinity |
-Infinity 減 Infinity | -Infinity |
+0 減 +0 | +0 |
+0 減 -0 | -0 |
-0 減 -0 | +0 |
有一個操作數是字符串、布爾值、null 或 undefined | 調用 Number() 函數轉換為數值,再執行減法;如果轉換結果是 NaN,結果就是 NaN |
有一個操作數是對象 | 調用對象的 valueOf() 取得數值;如果值是 NaN,結果就是 NaN;如果沒有 valueOf(),則調用 toString() 并將得到的字符串轉換為數值 |
操作數類型 | 結果 |
---|---|
兩個操作數都是數值 | 數值比較 |
兩個操作數都是字符串 | 比較兩個字符串中對應的字符編碼值 |
有一個操作數是數值 | 另一個操作數轉換為數值,再比較 |
有一個操作數是對象 | 調用對象的 valueOf() ,再按照前面的規則執行比較;如果對象沒有 valueOf() 方法,則調用 toString() 并將得到的結果進行比較 |
有一個操作數是布爾值 | 先轉換為數值,再比較 |
注意:
用關系操作符比較兩個字符串時,比較的是兩個字符串中對應位置的每個字符的字符編碼值。因此,如果要真正按字母表順序比較字符串,就必須把兩個操作數都轉換為相同的大小寫形式后,再進行比較。比較數值的字符串形式時,比較的也是字符串編碼。任何操作數與NaN 比較,結果都是 false。<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>關系操作符</title></head><body><script type="text/javascript"> console.log(5 > 3);//true console.log(5 < 3);//false //字符串比較的是字符串中對應位置的字符編碼值,而大寫字母的編碼值都小于小寫字母的字符編碼 console.log("Brick" < "alphabet");//true console.log("Brick".toLowerCase() < "alphabet".toLowerCase());//false;全部轉為小寫或者大寫,這樣就能按照字母表順序比較 console.log("23" < "3");//true;數字字符串比較的還是字符編碼 console.log("23" < 3);//false;其中一個操作數如果是數字,就會把另一個操作數也轉為數字后,再進行比較 console.log("a" < 3);//false;非法數字的字符串會被轉換為 NaN,任何操作數與 NaN 比較都是 false。 console.log(NaN < 3);//false console.log(NaN >= 3);//false</script></body></html>操作數類型 | 結果 |
---|---|
有一個操作數是布爾值 | 先轉換為數值;false 轉為 0,true 轉為 1 |
一個操作數是字符串,另一個是數值 | 先將字符串轉換為數值,再比較 |
一個操作數是對象,另一個不是 | 調用對象的 valueOf() 方法,再比較 |
比較規則:
null 和 undefined 是相等的。比較相等性之前,不能將 null 和 undefined 轉換成其他任何值。有一個操作數是 NaN,則相等操作符返回 false;即使兩個操作數都是 NaN,相等操作符也是返回 false(因為 NaN 不等于 NaN)。如果兩個操作數都是對象,則比較它們是不是同一個對象(即指向同一個對象)。注意:
null == undefined ,返回 true。null === undefined,返回 false。為了保證代碼中數據類型的完整性,推薦使用全等和不全等操作符。新聞熱點
疑難解答