JavaScript基礎(一)之[乘性,加性,關係,相等,條件,賦值,逗號]操作符

JavaScript基礎(一)之[乘性,加性,關係,相等,條件,賦值,逗號]操作符

乘性操作符

  • ECMAScript定義了3個乘性操作符:乘法、除法和求模。這些操作符與Java、C或者Perl中的相應操作符用途類似,只不過在操作數爲非數值的情況下會執行自動的類型轉換。如果參與乘法計算的某個操作數不是數值,後臺會先使用Number()轉型函數將其轉換爲數值。也就是說,空字符串將被當作0,布爾值true將被當作1。

乘法

  • 乘法操作符由一個星號(*)表示,用於計算兩個數值的乘積。其語法類似於C,如下面的例子所示:
var result = 34 * 56;
  • 在處理特殊值的情況下,乘法操作符遵循下列特殊的規則:
    • 如果操作數都是數值,執行常規的乘法計算,即兩個正數或者兩個負數相乘的結果還是正數,而如果只有一個操作數有符號,那麼結果就是負數。如果乘積超過了ECMAScript數值的表示範圍,則返回Infinity或者-Infinity;
    • 如果有一個操作數是NaN,則結果是NaN;
    • 如果是Infinity與0相乘,則結果是NaN;
    • 如果是Infinity與非0數值相乘,則結果是Infinity或者是-Infinity,取決於有符號操作數的符號;
    • 如果是Infinity與Infinity相乘,則結果是Infinity;
    • 如果有一個操作數不是數值,則在後臺調用Number()將其轉換爲數值,然後再應用上面的規則。

除法

  • 除法操作符由一個斜線符號(/)表示,執行第二個操作數除第一個操作數的計算,如下面的例子所示:
var result = 66 / 11;
  • 與乘法操作符類似,除法操作符對特殊的值也有特殊的處理規則。這些規則如下:
    • 如果操作數都是數值,執行常規的除法計算,即兩個正數或者兩個負數相除的結果還是正數,而如果只有一個操作數有符號,那麼結果就是負數。如果商超過了ECMAScript數值的表示範圍,則返回Infinity或者-Infinity;
    • 如果有一個操作數是NaN,則結果是NaN;
    • 如果是Infinity被Infinity除,則結果是NaN;
    • 如果是零被零除,則結果是NaN;
    • 如果是非零的有限數被零除,則結果是Infinity或者-Infinity,取決於有符號操作數的符號;
    • 如果是Infinity被任何非零數值除,則結果是Infinity或者-Infinity,取決於有符號操作數的符號;
    • 如果有一個操作數不是數值,則在後臺調用Number()將其轉換爲數值,然後再應用上面的規則。

求模

  • 求模(餘數)操作符由一個百分號(%)表示,用法如下:
var result = 26 % 5; // 等於1
  • 與另外兩個乘性操作符類似,求模操作符會遵循下列特殊規則來處理特殊的值:
    • 如果操作數都是數值,執行常規的除法計算,返回除得的餘數;
    • 如果被除數是無窮大值而除數是有限大的數值,則結果是NaN;
    • 如果被除數是由無限大的數值而除數是零,則結果是NaN;
    • 如果是Infinity被Infinity除,則結果是NaN;
    • 如果被除數是有限大的數值而除數是無窮大的數值,則結果是被除數;
    • 如果除數是零,則結果是零;
    • 如果有一個操作數不是數值,則在後臺調用Number()將其轉換爲數值,然後再應用上面的規則。

加性操作符

  • 加法和減法這兩個加性操作符應該說是編程語言中最簡單的算術操作符了。但是在ECMAScript中,這兩個操作符卻都有一系列的特殊行爲。與乘性操作符類似,加性操作符也會在後臺轉換不同的數據類型。然而,對於加性操作符而言,相應的轉換規則還稍微有點複雜。

加法

  • 加法操作符(+)的用法如下所示:
var result = 1 + 2;
  • 如果兩個操作符都是數值,執行常規的加法計算,然後根據下列規則返回結果:
    • 如果有一個操作數是NaN,則結果是NaN;
    • 如果是Infinity加Infinity,則結果是Infinity;
    • 如果是-Infinity加-Infinity,則結果是-Infinity;
    • 如果是-Infinity加Infinity,則結果是NaN;
    • 如果是+0加+0,則結果是+0;
    • 如果是-0加-0,則結果是-0;
    • 如果是+0加-0,則結果是+0;
  • 不過,如果有一個操作數是字符串,那麼就要應用如下規則:
    • 如果兩個操作數都屬字符串,則將第二個操作數與第一個操作數拼接起來;
    • 如果只有一個操作數是字符串,則將另一個操作數轉換爲字符串,然後再將兩個字符串拼接起來。
  • 如果有一個操作數是對象、數值或者布爾值,則調用它們的toString()方法取得相應的字符串值,然後再應用前面關於字符串的規則。對於undefinednull,則分別調用String()函數並取得字符串”undefined”和”null”。
  • 下面舉幾個例子:
var result = 5 + 5; // 兩個數值相加
console.log(result); // 10
var result2 = 5 + "5"; // 一個數值和一個字符串相加
console.log(result2); // "55"
  • 以上代碼演示了加法操作符在兩種模式下的差別。第一行代碼演示了正常的情況,即5 + 5 等於 10(數值)。但是,如果將一個操作數改爲字符串”5”,結果變成了”55”(字符串值),因爲第一個操作數也被轉換成了”5”。
  • 忽視加法操作中的數據類型是ECMAScript編程中最常見的以一個錯誤。再來看一個例子:
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + (num1 + num2);
console.log(message); // "The sum of 5 and 10 is 15"
  • 在這個例子中,一對圓括號把兩個數值變量括在了一起,這樣就會告訴解析器先計算其結果,然後再將結果與字符串拼接起來。因此,就得到了結果”The sum of 5 and 10 is 15”。

減法

  • 減法操作符(-)是另一個極爲常用的操作符,其用法如下所示:
var result = 2 - 1;
  • 與加法操作符類似,ECMAScript中的減法操作符在處理各種數據類型轉換時,同樣需要遵循一些規則,如下所示:
    • 如果兩個操作符都是數值,則執行常規的算術減法操作並返回結果;
    • 如果有一個操作數是NaN,則結果是NaN;
    • 如果是Infinity減Infinity,則結果是NaN;
    • 如果是-Infinity減-Infinity,則結果是NaN;
    • 如果是Infinity減-Infinity,則結果是NaN;
    • 如果是-Infinity減Infinity,則結果是-Infinity;
    • 如果是+0減+0,則結果是+0;
    • 如果是+0減-0,則結果是+0;(驗證的結果得出的結論,《JavaScript高級程序設計(第3版)》中錯在錯誤)
    • 如果是-0減-0,則結果是+0;
    • 如果有一個操作數是字符串、布爾值、null或者undefined,則先在後臺調用Number()函數將其轉換爲數值,然後再根據前面的規則執行減法計算。如果轉換的結果是NaN,則減法的結果就是NaN;
    • 如果有一個操作數是對象,則調用對象的valueOf()方法以取得表示該對象的數值。如果得到的值是NaN,則減法的結果是NaN。如果對象沒有valurOf()方法,則調用其toString()方法並將得到的字符串轉換爲數值。
  • 下面幾個例子展示了上面的規則:
var result1 = 5 - true; // 4, 因爲true被轉換成了1
var result2 = NaN - 1; // NaN
var result3 = 5 - 3; // 2
var result4 = 5 - ""; // 5, 因爲""被轉換成了0
var result5 = 5 - "2"; // 3, 因爲"2"被轉換成了2
var result6 = 5 - null; // 5, 因爲null被轉換成了0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章