亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

JavaScript 入門教程

JavaScript 算數運算符

算術運算符以數值(字面量或變量)作為其操作數,并返回一個單個數值。標準算術運算符是加法(+),減法( - ),乘法(*)和除法(/)?!?MDN

算數運算符是用來做算數運算的,如 + 這個符號,就是用來做加法操作。

1. N元運算

N 代表一個數,如一元運算,二元運算。

N元運算 表示由N個值產生一個新的值的規則。

* 就是一個二元運算符,他由兩個數相乘產生第三個數。

JavaScript 中有三元運算符、二元運算符、一元運算符。

注意:網絡上可以搜索到 JavaScript 中有更多元的運算,基本上都是使用三目(元)表達式嵌套來完成的,嚴格上說這不屬于更多元的運算。

與算數相關的只有二元與一元運算符:

二元運算符:

  • + 加法
  • - 減法
  • * 乘法
  • / 除法
  • % 求余
  • ** 冪 (ES2016 提案)

一元運算符:

  • + 一元正號
  • - 一元負號
  • ++ 遞增
  • -- 遞減

2. 二元運算符

2.1 加法(+)

加法用來做求和,將 + 左右兩邊的數值相加,也可以用來連接字符串。

var num1 = 2;
var num2 = 3;

var total = num1 + num2;
console.log(total); // 輸出:5

var firstName = 'hello';
var lastName = 'world';

var name = firstName + ' ' + lastName;
console.log(name); // 輸出:"hello world"

數字的加法就是和自然數學里的加法一樣,做累加操作。

+ 碰到字符串就會把兩邊字符連接到一起,形成一個新的字符串。

2.2 減法(-)

減法操作是將 - 左邊的數減去 - 右邊的數,結果就是差值。

var totalApple = 10; // 一共有10個蘋果
var take = 4; // 小明拿走了四個蘋果

var left = totalApple - take; // 還有 10 - 4 個蘋果

console.log(left); // 輸出:6

2.3 乘法(*)

乘法操作將 * 左右兩邊的數相乘,結果就是積。

var result = 5 * 6;

console.log(result); // 輸出:30

2.4 除法(/)

除法操作將 / 左邊的數作為被除數,右邊的數作為除數,最后求出結果。

var result = 6 / 2;

console.log(result); // 輸出:3

在許多強類型的語言中,整數相除即便無法除盡,結果必然是整數,但在 JavaScript 中,整數相除如果無法除盡,也會返回小數部分。

console.log(2 / 5); // 輸出:0.4

上面這個結果在 Java 中會返回 0,但是在 JavaScript 中會反回 0.4。

注意:如果拿正負 0 作為除數,則結果會返回 Infinity 與 -Infinity。

2.5 求余(%)

求余事實上就是取模運算,也就是取余數。如 8 對 3 取模,結果為 2,按小學數學中的說法就是 8 除 3 得 2余2,余2就是結果。

var result = 8 % 3;

console.log(result); // 輸出:2

2.6 冪(**)

冪是 ES2016 提供的新運算符,用來做乘方運算。

** 左邊是底數,右邊是指數,如 2 ** 3 按數學中的表示就是 23,即求 2 的 3 次方。

var total = 2 ** 3; // 2 的 3次方,結果為 2 * 2 * 2 ,即8

console.log(total); // 輸出:8

在 JavaScript 中的冪運算與其他語言有些許區別,規范中指出禁止使用帶有歧義的冪運算表達式。

如底數前不能跟隨一元運算符。

console.log(-8 ** 2); // 在JavaScript會報錯

圖片描述

以上冪運算是會報錯的,因為 JavaScript 無法知道是要在計算完 8 的 2 次方后求反,還是計算 -8 的 2 次方。

使用括號可以提供具體的意義,消除歧義:

console.log((-8) ** 2); // -8的2次方

console.log(-(8 ** 2)); // 計算完8的2次方后求反

3. 一元運算符

3.1 一元正號

一元正號通常不參與數學運算,而是用作類型轉換,一元正號可以很方便的將其他類型轉換成數字。

var num1 = +3;
var num2 = +'3';
var num3 = +true;
var num4 = +false;
var num5 = +null;
var timestamp = +new Date(); // 直接得到時間戳

3.2 一元負號

一元負號也可以將其他類型的數據轉換成數字,但是轉換完后會在前面加上負號。

var num1 = -3;
var num2 = -'3';
var num3 = -true;
var num4 = -false;
var num5 = -null;
var timestamp = -new Date();

通常比較多的使用場景是對數字取反,讓數值在正負值切換。

3.3 遞增

遞增操作會讓數值本身增加 1。

var num = 0;

num++;

console.log(num); // 輸出:1

num++;

console.log(num); // 輸出:2

這樣看,遞增操作有點像x = x + 1這種操作,其實只有在后置使用時的效果是和x = x + 1一樣的,也就是++x。

前置使用的時候,會先做遞增操作,再返回數值。

后置使用時候,會先返回數值,再做遞增操作。

var num = 0;

var total = 1 + (num++);

console.log(total, num); // 輸出:1 1

這個是前置使用的情況,可以看到 num 的值是 1,total 的值也是 1,也就是說 total 再累加的時候為(1 + 0),這個時候 num 的值為 0,再這個值返回后對 num 進行了遞增,所以輸出 num 結果為 1。

var num = 0;

var total = 1 + (++num);

console.log(total, num); // 輸出:2 1

這個是后置使用的情況,total 輸出結果為 2,在求和的時候就是(1 + 2),num 是在遞增后再被使用的。

3.4 遞減

遞增操作會讓數值本身減去 1。

與遞增一樣,遞減也具有前置使用與后置使用的情況。

var num = 1;
var total = 1 + (num--);

console.log(total); // 輸出:2

var num2 = 1;
var total2 = 1 + (--num);

console.log(total2); // 輸出:0

4. 優先級

算術符的優先級與自然數學中的相似,按照先乘除后加減的規則來,具體的可以參考下表:

優先級 運算類型 符號
6 括號 ( … )
5 后置遞增 … ++
后置遞減 … --
4 一元加法 + …
一元減法 - …
前置遞增 ++ …
前置遞減 -- …
3 … ** …
2 乘法 … * …
除法 … * …
取模 … % …
1 加法 … + …
減法 … - …

括號 > 后置遞增/后置遞減 > 一元加法/一元減法/前置遞增/前置遞減 > > 乘法/除法/取模 > 加法/減法

可以見到,括號的優先級是最高的,所以建議在自己不確定優先級的時候,盡量使用括號決定優先級。

如:

var res = 1 + 2 / 3 * 4 % 5 ** 7;

上面這個表達式的運算順序,即便是知道優先級,也不是一眼就能看出來的,所以建議即便是知道優先級,也使用括號將計算順序做區分。

將想要的計算順序用括號包裹后:

var res = 1 + (((2 / 3) * 4) % (5 ** 7));

4. 小結

算數運算符主要參與運算,N 元運算就是用 N 個值產生一個新的值,運算符有自己的特性和優先級,當表達式較長的時候,建議使用括號包裹來控制執行順序。