運(yùn)算符基本概念
- 和數(shù)學(xué)中的運(yùn)算符一樣, JavaScript中的運(yùn)算符是告訴程序執(zhí)行特定算術(shù)或邏輯操作的符號(hào)
-
例如告訴程序, 某兩個(gè)數(shù)相加, 相減,相乘等
- 什么是表達(dá)式
- 表達(dá)式就是利用運(yùn)算符鏈接在一起的有意義,有結(jié)果的語(yǔ)句;
- 例如: a + b; 就是一個(gè)算數(shù)表達(dá)式, 它的意義是將兩個(gè)數(shù)相加, 兩個(gè)數(shù)相加的結(jié)果就是表達(dá)式的結(jié)果
- 注意: 表達(dá)式一定要有結(jié)果
運(yùn)算符分類(lèi)
- 按照功能劃分:
- 算術(shù)運(yùn)算符
- 位運(yùn)算符
- 關(guān)系運(yùn)算符
- 邏輯運(yùn)算符
- 運(yùn)算符根據(jù)參與運(yùn)算的操作數(shù)的個(gè)數(shù)分為
- 單目運(yùn)算
- 單目運(yùn)算:只有一個(gè)操作數(shù) 如 : i++ !
- 雙目運(yùn)算
- 雙目運(yùn)算:有兩個(gè)操作數(shù) 如 : a+b;
- 三目運(yùn)算
- 三目運(yùn)算也稱(chēng)為問(wèn)號(hào)表達(dá)式 a>b ? 1 : 0;
- 單目運(yùn)算
運(yùn)算符的優(yōu)先級(jí)和結(jié)合性
- 在小學(xué)的數(shù)學(xué)課本中,我們就學(xué)習(xí)過(guò)"從左往右,先乘除后加減,有括號(hào)的先算括號(hào)里面的", 這句話(huà)就蘊(yùn)含了優(yōu)先級(jí)和結(jié)合性的問(wèn)題
- 優(yōu)先級(jí)
- JavaScript中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15 級(jí)。1 級(jí)最高,15 級(jí)最低。
- 在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。
- 在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理
| 運(yùn)算符 | 描述 |
|---|---|
| () | 表達(dá)式分組 |
| ++ -- - ~ ! | 一元運(yùn)算符 |
| * / % | 乘法、除法、取模 |
| + - + | 加法、減法、字符串連接 |
| << >> >>> | 移位 |
| < <= > >= | 小于、小于等于、大于、大于等于 |
| == != === !== | 等于、不等于、嚴(yán)格相等、非嚴(yán)格相等 |
| & | 按位與 |
| ^ | 按位異或 |
| | | 按位或 |
| && | 邏輯與 |
| || | 邏輯或 |
| ?: | 條件 |
| = += -= *= /= %= | 賦值運(yùn)算 |
| , | 多重求值 |
- 結(jié)合性
- JavaScript中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。
-
算術(shù)運(yùn)算符的結(jié)合性是自左至右,即先左后右
例如表達(dá)式: x - y + z; 則y 應(yīng)先與“-”號(hào)結(jié)合,執(zhí)行 x-y 運(yùn)算,然后再執(zhí)行+z 的運(yùn)算。 這種自左至右的結(jié)合 方向就稱(chēng)為“左結(jié)合性”。- 而自右至左的結(jié)合方向稱(chēng)為“右結(jié)合性”。
最典型的右結(jié)合 性運(yùn)算符是賦值運(yùn)算符 例如:如x = y = z = 10; 由于“=”的 右結(jié)合性,應(yīng)先執(zhí)行z = 10; 再執(zhí)行y = z 再執(zhí)行x = y運(yùn)算。 -
- JavaScript中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。
- 優(yōu)先級(jí)
- 先計(jì)算優(yōu)先級(jí)高的
var res = 2 + 3 * 8; 先算3 * 8, 再加上 2 - 優(yōu)先級(jí)相同則左結(jié)合計(jì)算
3*5/3*2 先算3*5,然后再算除3,最后再乘以2
- 先計(jì)算優(yōu)先級(jí)高的
算術(shù)運(yùn)算符
| 名稱(chēng) | 符號(hào) | 說(shuō)明 |
|---|---|---|
| 加法運(yùn)算符 | + | 對(duì)兩個(gè)值進(jìn)行加法運(yùn)算,并將結(jié)果返回 |
| 減法運(yùn)算符 | - | 對(duì)兩個(gè)值進(jìn)行減法運(yùn)算,并將結(jié)果返回 |
| 乘法運(yùn)算符 | * | 對(duì)兩個(gè)值進(jìn)行乘法運(yùn)算,并將結(jié)果返回 |
| 除法運(yùn)算符 | / | 對(duì)兩個(gè)值進(jìn)行除法運(yùn)算,并將結(jié)果返回 |
| 求余運(yùn)算符 (模運(yùn)算符) | % | 對(duì)兩個(gè)值進(jìn)行取余運(yùn)算,并將結(jié)果返回 |
- 加法運(yùn)算
- 格式: Number1 + Number2
var res = 1 + 1; console.log(res); // 2 var num1 = 10; var num2 = 20; var res2 = num1 + num2; console.log(res2); // 30 - 非Number類(lèi)型的值進(jìn)行運(yùn)算時(shí),會(huì)將這些值轉(zhuǎn)換為Number然后在運(yùn)算
var result = true + 1; console.log(result); // 2 result = true + false; console.log(result); // 1 result = 2 + null; console.log(result);// 2 - 任何值和NaN做運(yùn)算都得NaN
var result = 2 + NaN; console.log(result); //NaN - 任何的值和字符串做加法運(yùn)算,都會(huì)先轉(zhuǎn)換為字符串,然后再和字符串做拼串的操作
var result = 1 + "123"; console.log(result); // 1123 result = 2 + "true"; console.log(result); // 2true
- 格式: Number1 + Number2
- 減法運(yùn)算
- 格式: Number1 - Number2;
- 非Number類(lèi)型的值進(jìn)行運(yùn)算時(shí),會(huì)將這些值轉(zhuǎn)換為Number然后在運(yùn)算
- 任何值和NaN做運(yùn)算都得NaN
- 字符串做減法也會(huì)轉(zhuǎn)換為Number
- 乘法運(yùn)算
- 格式: Number1 * Number2;
- 其它規(guī)律和減法一樣
- 除法運(yùn)算
- 格式: Number1 / Number2
- 其它規(guī)律和減法一樣
- 取余運(yùn)算
- 格式: Number1 % Number2;
- m%n 求余,相當(dāng)于m/n 獲取余數(shù)
- 規(guī)律
- n等于0 返回NaN
- m等于0 結(jié)果為0
- m>n 正常求余 如:8%3 = 2
- m<n 結(jié)果是m 如:2%4 = 2
- 其它規(guī)律和減法一樣
正負(fù)運(yùn)算符
- 正號(hào)
- 正號(hào)不會(huì)對(duì)數(shù)字產(chǎn)生任何影響
- 對(duì)于非Number類(lèi)型的值,會(huì)將先轉(zhuǎn)換為Number,然后再運(yùn)算
- 負(fù)號(hào)
- 負(fù)號(hào)可以對(duì)數(shù)字進(jìn)行負(fù)號(hào)的取反
