標籤:表示 amp asc 移位 code 情況 blog 區分 大於等於
操作符
ECMA-262描述了一組用於操作資料值的操作符,包括算數操作符、位操作符、關係操作符和相等操作符。他們能夠適應很多值,例如字串、數字值、布爾值甚至對象。在應用對象時,相應的操作符都會調用對象的valueof()和toString()方法。取得可以操作的值。
一元操作符:只能操作一個值。
1.遞增和遞減操作符。
前置性(++i):++位於要操作的變數之前 變數先加1,然後賦值給左邊的變數。
後值性(i++):++位於要操作的變數之後 ,先賦給左邊的變數,然後再+1。
遞減同理;
var num1 = 2;var num2 = 20;var num3 = --num1 + num2; //等於21var num4 = num1 + num2; //等於21var num5 = num1-- +num2; //等於22 var num6 = num1 + num2; //等於21
他們不僅適用於整數,還可以用於字串、布爾值、浮點數值和對象。應用不同的值有不同的規則。
- 一個包含有效數字字元的字串時,先將其轉換為數字值,再執行加減 1 的操作。字串變數變成數值變數。
- 一個不包含有效數字字元的字串時,將變數的值設定為NaN。字串變數變成數值變數。
- 布爾值為false,先將其轉換為 0 再執行加減 1 的操作。布爾值變數變成數值變數。
- 布爾值true,先將其轉換為 1 再執行加減 1 的操作。布爾值變成數值變數。
- 浮點數值時,執行加減 1 的操作。
- 對象時,先調用對象的valueof()方法以取得一個可供操作的值,然後對該值應用前述規則。如果結果是NaN,則在調用toString()方法後再應用前述規則。物件變數變成數值變數。
var s1 = "2";var s2 = "z";var b = false;var f = 1.1;var o = { valueOf: function(){ return - 1;}};s1++; //值變成數值3s2++; //值變成NaNb++; //值變成數值1f--; //值變成0.10000000000000009(浮點舍入錯誤)o--; //值變成數值-2
2.一元加和減操作符
以一個加號(+)表示,放在數值前面,對數值不會產生任何影響。非數值前面,會對這個值進行轉換。
以一個減號(-)表示,放在數值前面,變成負數。非數值前面,對這個值進行轉換,變成負數。
位操作符
按位非(NOT) 波浪線(~)表示,結果是返回數值的反碼。
按位於(AND) 和號字元(&)表示,只在兩個數值的對應位都是 1 時才返回 1 ,任何一位是 0 ,結果都是 0 。
按位或(OR) 豎線符號(|)表示,有一個位是 1 的情況下就返回 1 ,而只有在兩個位都是 0 的情況下才返回 0 。
按位異或(XOR) 插入符號(^)表示,兩個數值對應位上只有一個 1 時才返回 1 ,如果對應的兩位都是 1 或都是 0 ,則返回 0 。
左移 兩個小於符號(>>)表示,會將數值的所有位向左移動指定的位元。不會影響運算元的符號位
有符號右移 兩個大於符號(<<)表示,會將數值向右移動,會用符號位填充所有空位。
無符號右移 三個大於符號(<<<)表示,位元向右移位,直接右移,對於正數,結果和>>相同,對於負數,會把負數的二進位補碼當成正數的二進位碼處理
布爾操作符
邏輯非(NOT):歎號(!)表示,將它的運算元轉換為一個布爾值,然後再對其求反。
同時使用兩個邏輯非操作符,可以將值轉換為真正的布爾值。
邏輯與(AND):兩個和號(&&)表示。
當兩個運算元相應的Boolean值均為true時,返回true;有一個false,都會返回false。
短路操作:如果第一個運算元能夠決定結果,那麼就不會再對第二個運算元求值。
邏輯或(AND):兩個豎線符號(||)表示。
當兩個運算元相應的Boolean值均為false時,返回false;有一個true,都會返回true。
短路操作:第一個操作結果為true,就不會對第二個運算元求值了。
計算操作符
乘法操作符由一個星號(*)表示,計算兩個數值的乘積。
除法操作符由一個斜線符號(/)表示,執行第二個運算元除第一個運算元的計算。
求模(餘數)操作符由一個百分比符號(%)表示。執行常規的除法計算,返回除得的餘數
加性操作符(+)
如果是數值,執行常規的加法計算。
如果有字串,則會拼接起來。添加圓括弧(),就可以對數值執行算術計算,然後再將結果與字串拼接起來。
減法操作符(-)
如果是數值,執行常規的減法計算,
如果是其他,則會轉換,在進行計算
1、除了加(+)之外,如果運算元不是Number類型,會自動調用Number()轉換為Number類型再進行計算。
2、對於加減(+-),除了作為算術運算子。還可以作為一元操作符(見上)。當然,由於字串操作中對加號(+)的重載,還可以用於將任意數值(的字串)相連,這也是第1點中為什麼要除了加(+),它在含有非Number類型值時,會將所有運算元轉換為字串相串連。
3、與一般類C語言不同,在ES中,除(/)和模數(%)並不會區分整數和浮點數,比如 5 / 2 = 2.5 而不是2,5.3 % 3 = 2.3 而不是2。
4、任意運算,只要運算元含NaN,結果就是NaN。但並不是結果為NaN就一定有一個運算元為NaN,比如0/0也返回NaN。
5、對於含無窮Infinity的運算,規定比較多,這裡就不列舉了,可以參考原書,或者自行測試。
關係操作符
小於(<)、大於(>)、小於等於(<=)和大於等於(>=)對兩個值進行比較,都會返回一個布爾值。
1.如果兩個運算元都是數值,則執行數值比較。
2.如果兩個運算元都是字串,則比較相對應的字元編碼值。
3、操作符是對象時,調用valueOf()(如果沒有,就調用toString()),再將結果按上面規則比較。
4、任意數和NaN比較返回false。
相等操作符
等號(==) 不等於(!=) 先轉換運算元,然後再比較它們的相等性。
全等(===) 不全等(!==)不會轉換運算元,直接比較。
a===b則一定有a==b,而a!=b則一定有a!==b。
條件操作符
variable = boolean_expression ? true_value : false_value;
該運算式主要是根據 boolean_expression 的計算結果有條件地為變數賦值。如果 Boolean_expression 為 true,就把 true_value 賦給變數;如果它是 false,就把 false_value 賦給變數。
賦值操作符(=) 右則的值賦給左側的變數。
每種主要的算術運算以及其他幾個運算都有複合賦值運算子:
- 乘法/賦值(*=)
- 除法/賦值(/=)
- 模數/賦值(%=)
- 加法/賦值(+=)
- 減法/賦值(-=)
- 左移/賦值(<<=)
- 有符號右移/賦值(>>=)
- 無符號右移/賦值(>>>=)
逗號操作符
使用逗號操作符可以在一條語句中執行多個操作。
var iNum1 = 1, iNum = 2, iNum3 = 3;
多用於聲明多個變數。
JavaScript進階程式設計(3)基本概念 中