JavaScript操作符包括算術操作符、位操作符、關系操作符和相等操作符。只能操作一個值的操作符叫做一元操作符。
遞增和遞減操作符
遞增和遞減操作符有兩個版本:前置型和后置型。前置型操作符位於要操作的變量之前,后置型操作符位於要操作的變量之后。
需要將一個變量的值在使用前就進行加減操作,一般使用前置操作符。
var age=18; console.log(++age);//前置型操作符是先計算,返回計算后的值。輸出為19 console.log(age);//輸出19; console.log(--age);//輸出18 var age1=18; console.log(age1++);//后置型操作符是在包含該語句執行后,才進行加減操作的,此時age1是18 console.log(age1);//此時age1已經變為19; console.log(age1--);//此時age1依然是19;
從上面大家應該能看出來前置型操作與后置型操作符的區別。前置型操作符,在使用該變量之前已經進行++或者--操作,而后置型操作符是先使用該變量,然后再進行++或者--操作的。
一元加減操作符
大多數開發人員對一元加減操作符都不陌生,一元+操作符放在數值前面,對數值不會產生影響。一元減操作符(-)用於表現負數,如-1.
位操作符
位操作符用於在最進本的層次上,即按內存中表示數值的位來操作數值。JavaScript中的所有數值以IEEE-754 64位格式存儲,但位操作符並不直接操作64位的值。而是先將64位的值轉換為32位的整數,然后執行操作,最后將結果轉回64位。
對於有符號的整數,32位中的前31位表示整數的值,最后一位表示數值的符號:0表示整數,1表示負數。表示符號的位叫做符號位,符號位的值決定了數值的格式。其中,整數易二進制格式存儲。31位中每一位都表示2的冪,第一位是2^0,第二位是2^1,沒用用到的位用0補充,可以忽略。如數值123,二進制表示為00000000000000000000000011110110,也可以表示為11110110。1*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+1*2^0.
負數也是以二進制來表示,但是使用的是二進制的補碼。計算一個數值的二進制補碼需要經過以下步驟:
1.先求這個數值的絕對值的二進制編碼;
2.求二進制反碼,將二進制碼的0替換1,1替換為0
3.將二進制的反碼加1.
如-123的二進制編碼為:123的二進制編碼,0000 0000 0000 0000 0000 0000 1111 0110,反碼:1111 1111 1111 1111 1111 1111 0000 1001,加1:1111 11111 11111 11111 11111 0000 1010
按為非(~)
按位非操作符由一個波浪線表示,執行按位非操作符其實就是求這個數值的反碼。結果是這個數值的負數減去1.
var num=20; console.log(~num);//輸出-21 var num2=-20; console.log(~num2);//輸出19
按位與(and)
按位與操作符由一個字符&表示,它有兩個操作符數。按位與就是將兩個數值的每一位對齊。只有兩個數值的位都為1的時候返回1.其他返回0.如 12&10,輸出結果為8
0000 0000 0000 0000 0000 0000 0001 1000
0000 0000 0000 0000 0000 0000 0001 0100
0000 0000 0000 0000 0000 0000 0001 0000
按位或(or)
按位或操作符由一個(|)表示,也有兩個操作數。按位或操作符在有一個為1的 情況下就返回1,只有兩個同時為0才返回0.如12|10,輸出結果為14.
0000 0000 0000 0000 0000 0000 0001 1000
0000 0000 0000 0000 0000 0000 0001 0100
0000 0000 0000 0000 0000 0000 0001 1100
按位異或(Xor)
按位異或操作符用一個(^)來表示。按位異或操作符在對應的數值上只有一個1時才返回1,若有兩個1或者兩個0則返回0.如12^10,輸出結果為6
0000 0000 0000 0000 0000 0000 0001 1000
0000 0000 0000 0000 0000 0000 0001 0100
0000 0000 0000 0000 0000 0000 0000 1100
左移操作符
左移操作符由兩個小於號組成(<<),這個操作符會將數值的所有為向左移動指定的位數。如果將數值2(10)向左移動5位,結果就是64(1000000)。左移后,右側空出的位置用0補充。
var num=2; var num1=2<<5; console.log(num1);//64 console.log(num1.toString(2));//1000000
右移操作符
右移操作符由兩個大於號(>>)組成,有符號右移操作符向右移動,並保留符號位。有符號的右移與左移正好相反,64向右移動5位,值為2.
var num=64;//1000000; var num1=num>>5; console.log(num1.toString(2));//10 console.log(num1);//2
無符號右移操作符由三個大於號(>>>)組成,運算符將 expression1 的位右移 expression2 中指定的位數。 用零填充右移后左邊空出的位。 右移的位被丟棄.
var temp temp = -14 >>> 2
變量 temp 具有初始值 -14(二進制補碼 11111111 11111111 11111111 11110010)。 其右移兩位后,值等於 1073741820(即二進制的 00111111 11111111 11111111 11111100)。