《JavaScript高級程序設計》筆記——chapter3 操作符

3.5 操作符

3.5.1 一元操作符  ——只能操作一個值

1、遞增和遞減

  • 前置型——先+ - 再求值
    • 前增(++a)
    • 前減(--a)

var a = 29;
var b = --a + 2;
alert(a);  //輸出28
alert(b);  //輸出30

  • 後置型——先求值再 + -
    • 後增(a++)
    • 後減(a--)

var a = 2;
var b = 21;
var c = a++ + b;  //23
var d = a + b;    //24


2、一元加和減操作符
——主要用於基本的算術運算,也可以用於轉換數據類型
一元操作符放在數值前面,不會對數值造成任何影響。
不過,在對非數值應用一元操作符時,該操作符會像Number(  )  轉型函數一樣對這個值進行轉換。

var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf: function() {
         return -1;  
    }
};

s1 = +s1;  //1
s1 = +s1;  //1.1
s1 = +s1;  //NaN
b = +b;    //0
f = +f;    //1.1
o = +o;    //-1
 //操作符爲 -  時,只是將得到的數值在轉換爲負數而已。



3.5.2  位操作符(對目前來,太底層,有時間再理解 )
——用於在最基本的層次上,即按內存中表示數值的位來操作數值。

  • 按位非(NOT)
  • 按位與(AND)
  • 按位或(OR)
  • 按位異或(XOR)
  • 左移
  • 有符號的右移
  • 無符號右移



3.5.3  布爾操作符
——非(NOT)  與(AND)  或(OR)

1、邏輯非(!)

可以應用於ECMAScript 中的任何值。無論這個值是什麼數據類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數轉換爲一個布爾值,然後再對其求反。
邏輯非操作符遵循下列規則:
alert(!false);    //true
alert(!"blue");   //false
alert(!0);        //true
alert(!NaN);      //true
alert(!"");       //true
alert(!123);      //false 

同時使用兩個邏輯非操作符 !!,可以模擬Boolean(  ) 轉型函數的行爲。


2、邏輯與(&&)
——可以用於任何類型的操作數,不僅僅是布爾值。

邏輯與的真值表如下:
規則:
q 如果第一個操作數是對象,則返回第二個操作數;
q 如果第二個操作數是對象,則只有在第一個操作數的求值結果爲true 的情況下才會返回該對象;
q 如果兩個操作數都是對象,則返回第二個操作數;
q 如果有一個操作數是null,則返回null
q 如果有一個操作數是NaN,則返回NaN
q 如果有一個操作數是undefined,則返回undefined

alert(1 && 2 && 3);  //返回數值3
alert("a" && "b");   //返回"b"
//這一特點可以好好利用,用來做賦值。

&& 和 ||  屬於短路操作,即如果第一個能夠決定結果,就不再對第二個操作數求值。
對於&&,第一個操作數的求值結果是false的話,直接返回false
對於||, 第一個操作數的求值結果是true的話,直接返回true


3、邏輯與(||)

邏輯或的真值表如下:
規則:
q 如果第一個操作數是對象,則返回第一個操作數;
q 如果第一個操作數的求值結果爲false,則返回第二個操作數;
q 如果兩個操作數都是對象,則返回第一個操作數;
q 如果兩個操作數都是null,則返回null
q 如果兩個操作數都是NaN,則返回NaN
q 如果兩個操作數都是undefined,則返回undefined

可以利用邏輯或來賦值。例如:
var myObject = preferredObject || backupObject;
變量myObject將被賦予等號後兩個值中的一個。變量preferredObject 中包含優先賦給變量myObject 的值,變量 backupObject 負責在preferredObject 中不包含有效值的情況下提供後備值。如果preferredObject 的值不是null,那麼它的值將被賦給myObject;如果null,則將backupObject 的值賦給myObject。


3.5.4  乘性操作符 (相應規則,暫且不表)
  • 乘法(*)
  • 除法(/)
  • 求模(%)


3.5.5  加性操作符 (相應規則,暫且不表)
  • 加法(+)(注意加法操作符的字符串拼接作用
var num1 = 5;
var num1 = 10;

var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message);    //"The sum of 5 and 10 is 510"  
//每個 + 是獨立的,按順序執行的

var message ="The sum of 5 and 10 is " + (num1 + num2);
alert(message);    //"The sum of 5 and 10 is 15"

  • 減法(-)


3.5.6  關係操作符(相應規則,暫且不表)
  • 小於(<)
  • 大於(>)
  • 小於等於(<=)
  • 大於等於(>=)


3.5.7  相等操作符 (相應規則,暫且不表)
  • 相等(==) 和 不相等(!=)        先轉換再比較
特殊情況:
  • 全等(===) 和 不全等(!==)   僅比較不轉換
alert("55" != 55);    //false  先轉換再比較
alert("55" !== 55);   //true   不轉換,數據類型不同



3.5.8  條件操作符

看例子吧:
variable = boolean_expression ? true_value : false_value;
本質上,這行代碼的含義就是基於對boolean_expression 求值的結果,決定給變量variable賦什麼值。如果求值結果爲true,則給變量variable true_value 值;如果求值結果爲false則給變量variable false_value 值。

再看一個例子:
var max = (num1 > num2) ? num1 : num2;
在這個例子中,max 中將會保存一個最大的值。這個表達式的意思是:如果num1 大於num2(關系表達式返回true),則將num1 的值賦給max;如果num1 小於或等於num2(關係表達式返回false),則將num2 的值賦給max


3.5.9 賦值操作符(=)

複合賦值操作:
  • 乘/賦值(*=)
  • 除/賦值(/=)
  • 模/賦值(%=)
  • 加/賦值(+=)
  • 減/賦值(-=)
  • 左移/賦值(<<=)
  • 有符號右移/賦值(>>=)
  • 無符號右移/賦值(>>>=)

舉個例子:
var num = 10;
var num += 10;   //等同於
var num = num + 10;


3.5.10  逗號操作符

使用逗號操作符可以在一條語句中執行多個操作。
var num1=1, num2=2, num3=3;

此外,還可用於賦值。在用於賦值時,逗號操作符總會返回表達式的最後一項
var num = (2, 5, 7, 4, 3 );  // num的值是3




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