1. 程式人生 > >JavaScript教程筆記(10)-運算子

JavaScript教程筆記(10)-運算子

1 概述

JavaScript 提供了10種算術運算子,用來完成基本的算術運算。

  • 加法運算子:x + y
  • 減法運算子: x - y
  • 乘法運算子: x * y
  • 除法運算子:x / y
  • 指數運算子:x ** y
  • 餘數運算子:x % y
  • 自增運算子:++ x 或者 x ++
  • 自減運算子:–x 或者 x–
  • 數值運算子: +x
  • 負數值運算子:-x

這些運算子的使用方法和其它語言的差不多,本文只介紹幾處有用的重點。

2 加法運算子

加法運算子(+)一般用來求兩個數值的和。如果是兩個字串相加,將會把兩個字串連線在一起。

1 + 2 // 3
true + true // 2
1 + 'a' // "1a"
'a' + 'bc' // "abc"

加法運算子到底是執行相加,還是執行連線,是根據不同的運運算元在執行時決定的。

'1' + 2 + 3 // "123"
1 + 2 + '3' // '33'

上面程式碼中,由於從左到右的運算次序,產生不同的執行結果。

3 指數運算子

指數運算子(**)完成指數運算,前一個運運算元是底數,後一個運運算元是指數。

2 ** 4 // 16
// 相當於 2 ** (3 ** 2)
2 ** 3 ** 2 // 512

注意,指數運算子是右結合,而不是左結合。

4 或運算子(||)

或運算子常用於為一個變數設定預設值。

function saveText(text) {
  text = text || '';
  // ...
}

// 或者寫成
saveText(this.text || '')

上面程式碼表示,如果函式呼叫時,沒有提供引數,則該引數預設設定為空字串。

5 位運算子

前面介紹過,JavaScript內部的數值都是以64位浮點數的形式儲存,但是做位運算的時候,是以32位帶符號的整數進行運算的,並且返回值也是一個32位帶符號的整數。

二進位制或運算(|)

i = i | 0;

上面這行程式碼,就是將i(不管是整數或小數)轉為32位整數。

利用這個特性,可以寫出一個函式,將任意數值轉為32位整數。

function toInt32(x) {
  return x | 0;
}

toInt32(1.001) // 1
toInt32(-9.999) // -9

上面這個函式將任意值與0進行一次或運算,這個位運算會自動將一個值轉為32位整數。

二進位制否運算子(~)

否運算子(~)將每個二進位制位都變為相反值(0變為1,1變為0)。

對一個整數連續兩次二進位制否運算,得到它自身。

~~3 // 3

因為所有的位運算都只對整數有效。二進位制否運算遇到小數時,也會將小數部分捨去,只保留整數部分。所以,對一個小數連續進行兩次二進位制否運算,能達到取整效果。

~~2.9 // 2
~~47.11 // 47
~~1.9999 // 1
~~3 // 3

使用二進位制否運算取整,是所有取整方法中最快的一種。

異或運算子(^)

異或運算(^)在兩個二進位制位不同時返回1,相同時返回0。

0 ^ 3 // 3

上面表示式中,0(二進位制00)與3(二進位制11)進行異或運算,它們每一個二進位制位都不同,所以得到11(即3)。

“異或運算”有一個特殊運用,連續對兩個數a和b進行三次異或運算,a^=b; b^=a; a^=b;,可以互換它們的值。這意味著,使用“異或運算”可以在不引入臨時變數的前提下,互換兩個變數的值。

var a = 10;
var b = 99;

a ^= b, b ^= a, a ^= b;

a // 99
b // 10

這是互換兩個變數的值的最快方法。

異或運算也可以用來取整。

9.99 ^ 0 // 9