一元操作符
只能操作一個值的操作符叫做一元操作符
1.遞增和遞減操作符
前置遞增和遞減:
var age=29;
++age;
以上爲前置遞增,在這個例子中前置遞增操作符把age的值變成了30(爲29加上了1)。實際上,執行這個前置遞增操作與執行以下操作的效果相同:
var age=29;
age=age+1;
執行前置遞減操作方法也類似,結果會從一個數值中減去1
總結:執行前置遞增和遞減操作符時,變量的值都是在語句被求值以前改變的,即先對變量進行自增或自減操作後,再執行語句
var age=29;
var anotherage=--age +2;
alert(age); //28
alert(anotherage); //30
這個例子中變量anotherage的初始值等於變量age的值先在29的基礎上減去1後,再加2。
由於先執行了減法操作,age的值變爲了28,然後再執行alert,所以最終alert(age);的結果爲28
後置遞增和遞減:
var num1=2;
var num2=20;
var num3=num1-- +num2; //22
var num4=num1+num2; //21
num3的初始化值爲num1的值加上num2的值,這裏執行完畢後,num1的值自減1 ,變爲num1=1
num4的初始化值爲num1進行自減1操作後的值num1=1,加上num2的值
總結:後置自增和自減,是在語句執行完畢之後對變量進行自增或自減操作,即先將變量原始的值帶入表達式進行計算,之後再對變量的值進行自增或自減
在應用於不同的值時,遞增和遞減操作符遵循以下規則
- 在應用於一個包含有效數字字符的字符串時,先將其轉換爲數字值,再執行加減1的操作。字符串變量變爲數值變量
- 在應用於一個不包含有效數字字符的字符串時,將變量值設置爲NAN,字符串變量變爲數值變量
- 在應用於布爾值false時,先將其轉換爲0再執行加減1的操作。布爾值變量變成數值變量
- 在應用於布爾值爲true時,先將其轉換爲1再執行加減1的操作。布爾值變量變成數值變量
- 在應用於浮點數值時,執行加減1的操作
- 在應用於對象時,先調用對象的valueOf()方法,已取得一個可供操作的值。然後對改值應用前述規則。如果結果是NAN,則在調用toString()方法後再應用前述規則。對象變量變成數值變量
var s1="2" s1++; //值變成數值3
var s2="x" s2++; //值變成NAN
var b=false; b++; //值變成數值1
var f=1.1 f--; //值變成0.100000000000000009
var o={
valueOf:function(){
return -1;
}
}
o--; //值變成數值2
2.一元加和減操作符
一元(+)操作符以一個+號表示,放在數值前面,對數值不會產生任何影響
var num=25;
num = +num; //任然是25
對不同數據類型用運一元加操作符的結果
var s1="01" s1= +s1; //值變成數值1
var s2="1.1" s2= +s2; //值變成數值1.1
var s3="z" s3= +s3; //值變成NaN
var b=false; s4= +s4; //值變成數值0
var f= 1.1; s5= +s5; //值未變,任然是1.1
var o={
valueOf:function(){
return -1;
}
}
o= +0; //值變成數值-1
一元減操作符主要用於表示負數,而當應用於非數值時,一元操作符遵循與一元加操作符相同的規則。
3.位操作符
位操作符並不直接操作64位的值。而是先將64位的值轉換爲32位的整數,然後執行操作,最後再將結果轉換回64位
對於有符號的整數,32位中的前31位用於表示整數的值。第32位用於表示數值的符號:0表示整數;1表示負數;這個表示符號的位叫做符號位
正數以純二進制格式存儲
負數同樣以二進制碼存儲,但使用的格式是二進制補碼。計算一個數值的二進制補碼需要啊以下三個步驟:
- 求這個數值絕對值的二進制碼(例如,要求-18的二進制補碼,先求18的二進制碼)
- 求二進制反碼,即將0替換爲1,將1替換爲0
- 得到的二進制反碼加1
0000 0000 0000 0000 0000 0000 0001 0010 //18的二進制碼
1111 1111 1111 1111 1111 1111 1110 1101 //18的二進制反碼
1111 1111 1111 1111 1111 1111 1110 1101
1 //反碼加1
1111 1111 1111 1111 1111 1111 1110 1110 //-18的二進制碼
按位非:執行按位非的結果就是返回數值的反碼
按位與:將兩個數值的每一位對齊,在兩個數值的對應都是1時才返回1,任何一位是0,結果都是0
按位或:在有一個位是1的情況下就返回1,在兩個位都是0的情況下才返回0
按位異或:對應位上只有一個1時才返回1,如果對應的兩位都是1或都是0,則返回0