js高級程序設計第三版筆記--操作符01

一元操作符

只能操作一個值的操作符叫做一元操作符

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表示負數;這個表示符號的位叫做符號位

正數以純二進制格式存儲

負數同樣以二進制碼存儲,但使用的格式是二進制補碼。計算一個數值的二進制補碼需要啊以下三個步驟:

  1. 求這個數值絕對值的二進制碼(例如,要求-18的二進制補碼,先求18的二進制碼)
  2. 求二進制反碼,即將0替換爲1,將1替換爲0
  3. 得到的二進制反碼加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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章