1. 程式人生 > >JavaScript高級程序設計(3)基本概念 中

JavaScript高級程序設計(3)基本概念 中

算數 variable 多個 產生 加法 關系操作符 style 語句 移動

操作符

ECMA-262描述了一組用於操作數據值的操作符,包括算數操作符、位操作符、關系操作符和相等操作符。他們能夠適應很多值,例如字符串、數字值、布爾值甚至對象。在應用對象時,相應的操作符都會調用對象的valueof()和toString()方法。取得可以操作的值。

一元操作符:只能操作一個值。

1.遞增和遞減操作符。

前置性(++i):++位於要操作的變量之前 變量先加1,然後賦值給左邊的變量。

後值性(i++):++位於要操作的變量之後 ,先賦給左邊的變量,然後再+1。

遞減同理;

var  num1 = 2;
var  num2 = 20;
var  num3 = --num1 + num2;           //
等於21 var num4 = num1 + num2; //等於21 var num5 = num1-- +num2; //等於22 var num6 = num1 + num2; //等於21

他們不僅適用於整數,還可以用於字符串、布爾值、浮點數值和對象。應用不同的值有不同的規則。

  1. 一個包含有效數字字符的字符串時,先將其轉換為數字值,再執行加減 1 的操作。字符串變量變成數值變量。
  2. 一個不包含有效數字字符的字符串時,將變量的值設置為NaN。字符串變量變成數值變量。
  3. 布爾值為false,先將其轉換為 0 再執行加減 1 的操作。布爾值變量變成數值變量。
  4. 布爾值true,先將其轉換為 1 再執行加減 1 的操作。布爾值變成數值變量。
  5. 浮點數值時,執行加減 1 的操作。
  6. 對象時,先調用對象的valueof()方法以取得一個可供操作的值,然後對該值應用前述規則。如果結果是NaN,則在調用toString()方法後再應用前述規則。對象變量變成數值變量。
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
  valueOf: function()
{
  return - 1;
}
};

s1++;                           //
值變成數值3 s2++; //值變成NaN b++; //值變成數值1 f--; //值變成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)基本概念 中