運(yùn)算符基本概念
- JavaScript運(yùn)算符的概念和C語言一樣, 都是告訴程序執(zhí)行特定算術(shù)或邏輯操作的符號。
運(yùn)算符分類
JavaScript運(yùn)算符的分類和C語言也一樣
-
按照功能劃分:
- 算術(shù)運(yùn)算符
- 位運(yùn)算符
- 關(guān)系運(yùn)算符
- 邏輯運(yùn)算符
-
運(yùn)算符根據(jù)參與運(yùn)算的操作數(shù)的個數(shù)分為
- 單目運(yùn)算
- 雙目運(yùn)算
- 三目運(yùn)算
運(yùn)算符的優(yōu)先級和結(jié)合性
- 優(yōu)先級
- JavaScript運(yùn)算符的優(yōu)先級和C語言也一樣
- JavaScript中,運(yùn)算符的運(yùn)算優(yōu)先級共分為15 級拉背。1 級最高,15 級最低。
- 在表達(dá)式中,優(yōu)先級較高的先于優(yōu)先級較低的進(jìn)行運(yùn)算默终。
- 在一個運(yùn)算量兩側(cè)的運(yùn)算符優(yōu)先級相同時,則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理
運(yùn)算符 | 描述 |
---|---|
() | 表達(dá)式分組 |
++ -- - ~ ! | 一元運(yùn)算符 |
* / % | 乘法椅棺、除法犁罩、取模 |
+ - + | 加法、減法两疚、字符串連接 |
<< >> >>> | 移位 |
< <= > >= | 小于床估、小于等于、大于诱渤、大于等于 |
== != === !== | 等于丐巫、不等于、嚴(yán)格相等勺美、非嚴(yán)格相等 |
& | 按位與 |
^ | 按位異或 |
| | 按位或 |
&& | 邏輯與 |
|| | 邏輯或 |
?: | 條件 |
= += -= *= /= %= | 賦值運(yùn)算 |
, | 多重求值 |
- 結(jié)合性
- JavaScript運(yùn)算符的結(jié)合性和C語言也一樣
- 即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)递胧。
算術(shù)運(yùn)算符
- JavaScript算術(shù)運(yùn)算符和C語言也一樣
名稱 | 符號 | 說明 |
---|---|---|
加法運(yùn)算符 | + | 對兩個值進(jìn)行加法運(yùn)算,并將結(jié)果返回 |
減法運(yùn)算符 | - | 對兩個值進(jìn)行減法運(yùn)算赡茸,并將結(jié)果返回 |
乘法運(yùn)算符 | * | 對兩個值進(jìn)行乘法運(yùn)算缎脾,并將結(jié)果返回 |
除法運(yùn)算符 | / | 對兩個值進(jìn)行除法運(yùn)算,并將結(jié)果返回 |
求余運(yùn)算符 (模運(yùn)算符) | % | 對兩個值進(jìn)行取余運(yùn)算占卧,并將結(jié)果返回 |
- 基本使用和C語言一模一樣
var res1 = 1 + 1; var res2 = 1 - 1; var res3 = 2 * 2; var res4 = 10 / 3; var res5 = 10 % 3; console.log(res1); // 1 console.log(res2); // 0 console.log(res3); // 4 console.log(res4); // 3.3333 console.log(res5); // 1
- 注意點(diǎn):
-
和C語言不同的是JavaScript中整數(shù)除以整數(shù)結(jié)果是小數(shù)
var res4 = 10 / 3; console.log(res4); // 3.3333
-
任何值和NaN做運(yùn)算都得NaN
var result = 2 + NaN; console.log(result); //NaN
-
非Number類型的值進(jìn)行運(yùn)算時遗菠,會將這些值轉(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
-
任何的值和字符串做加法運(yùn)算,都會先轉(zhuǎn)換為字符串华蜒,然后再和字符串做拼串的操作
var result = 1 + "123"; console.log(result); // 1123 result = 2 + "true"; console.log(result); // 2true
-
任何的值和字符串做- * / %法運(yùn)算, 都會先轉(zhuǎn)換為字符串轉(zhuǎn)換為Number
var result = 2 - "1"; // - * / % console.log(result); // 1 result = "2" - "1"; console.log(result); // 1
-
取余運(yùn)算m%n, n等于0 返回NaN, 其它和C語言一樣
var result = 10 % 0; console.log(result); // NaN
-
正負(fù)運(yùn)算符
- 正號
- + 正號不會對數(shù)字產(chǎn)生任何影響
var num = 123; num = +num; console.log(num); // 123
- 對于非Number類型的值,會將先轉(zhuǎn)換為Number辙纬,然后再運(yùn)算
var bool = true; var res = +bool; console.log(res); // 1 var str = "123"; res = +str; console.log(res); // 123 var str2 = "123abc"; res = +str2; console.log(res); // NaN, 所以內(nèi)部不是調(diào)用parseInt, 而是Number()函數(shù) var temp = null; res = +temp; console.log(res); // 0
- 負(fù)號
- - 負(fù)號可以對數(shù)字進(jìn)行負(fù)號的取反
var num = 123; num = -num; console.log(num); // -123
- - 負(fù)號可以對數(shù)字進(jìn)行負(fù)號的取反
賦值運(yùn)算符
- JavaScript賦值運(yùn)算符和C語言也一樣
優(yōu)先級 | 名稱 | 符號 | 說明 |
---|---|---|---|
14 | 賦值運(yùn)算符 | = | 雙目運(yùn)算符,具有右結(jié)合性 |
14 | 除后賦值運(yùn)算符 | /= | 雙目運(yùn)算符,具有右結(jié)合性 |
14 | 乘后賦值運(yùn)算符 (模運(yùn)算符) | *= | 雙目運(yùn)算符,具有右結(jié)合性 |
14 | 取模后賦值運(yùn)算符 | %= | 雙目運(yùn)算符,具有右結(jié)合性 |
14 | 加后賦值運(yùn)算符 | += | 雙目運(yùn)算符,具有右結(jié)合性 |
14 | 減后賦值運(yùn)算符 | -= | 雙目運(yùn)算符,具有右結(jié)合性 |
自增自減運(yùn)算符
- JavaScript自增自減運(yùn)算符和C語言也一樣
優(yōu)先級 | 名稱 | 符號 | 說明 |
---|---|---|---|
2 | 自增運(yùn)算符(在后) | i++ | 單目運(yùn)算符,具有左結(jié)合性 |
2 | 自增運(yùn)算符(在前) | ++i | 單目運(yùn)算符,具有右結(jié)合性 |
2 | 自減運(yùn)算符(在后) | i-- | 單目運(yùn)算符,具有左結(jié)合性 |
2 | 自減運(yùn)算符(在前) | --i | 單目運(yùn)算符,具有右結(jié)合性 |
關(guān)系運(yùn)算符
- JavaScript關(guān)系運(yùn)算符和C語言也一樣
- 和C語言不同的是, JavaScript中的關(guān)系運(yùn)算符只會返回true或false
優(yōu)先級 | 名稱 | 符號 | 說明 |
---|---|---|---|
6 | 大于運(yùn)算符 | > | 雙目運(yùn)算符,具有左結(jié)合性 |
6 | 小于運(yùn)算符 | < | 雙目運(yùn)算符,具有左結(jié)合性 |
6 | 大于等于運(yùn)算符 | >= | 雙目運(yùn)算符,具有左結(jié)合性 |
6 | 小于等于運(yùn)算符 | <= | 雙目運(yùn)算符,具有左結(jié)合性 |
7 | 等于運(yùn)算符 | == | 雙目運(yùn)算符,具有左結(jié)合性 |
7 | 不等于運(yùn)算符 | != | 雙目運(yùn)算符,具有左結(jié)合性 |
7 | 不等于運(yùn)算符 | === | 雙目運(yùn)算符,具有左結(jié)合性 |
7 | 不等于運(yùn)算符 | !== | 雙目運(yùn)算符,具有左結(jié)合性 |
- 注意點(diǎn):
- 對于非數(shù)值進(jìn)行比較時,會將其轉(zhuǎn)換為數(shù)字然后在比較
console.log(1 > true); //false console.log(1 > false); //true console.log(1 > "0"); //true console.log(1 > null); //true
- 如果符號兩側(cè)的值都是字符串時叭喜,不會將其轉(zhuǎn)換為數(shù)字進(jìn)行比較, 而會分別比較字符串中字符的Unicode編碼
-
Unicode編碼轉(zhuǎn)換地址
// a的Unicode編碼是:0061 // b的Unicode編碼是:0062 console.log("a" < "b");//true // 比較多位時則是從前往后一位一位比較 // 第一位相同比較第二位, 直到比較到不一樣或者結(jié)束為止 // c的Unicode編碼是:0063 // 類似于C語言strcmp函數(shù), 只不過JavaScript中比較的是Unicode編碼 console.log("ab" < "ac");//true
- null贺拣、undefined 、NaN比較
console.log(null == 0); // false console.log(undefined == 0); // false // 永遠(yuǎn)不要判斷兩個NaN是否相等 console.log(NaN == NaN); // false /* * 可以通過isNaN()函數(shù)來判斷一個值是否是NaN * 如果該值是NaN則返回true捂蕴,否則返回false */ var num = NaN; console.log(isNaN(num)); // true // undefined 衍生自 null, 所以返回true console.log(null == undefined); // true; console.log(null === undefined); // false; // == 判斷值是否相等 // == 會進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換 console.log("123" == 123); // true // === 判斷值和類型時候同時相等 // === 不會進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換 console.log("123" === 123); // false
- 對于非數(shù)值進(jìn)行比較時,會將其轉(zhuǎn)換為數(shù)字然后在比較
邏輯運(yùn)算符
- JavaScript邏輯運(yùn)算符和C語言也一樣
優(yōu)先級 | 名稱 | 符號 | 說明 |
---|---|---|---|
2 | 邏輯非運(yùn)算符 | ! | 單目運(yùn)算符,具有右結(jié)合性 |
11 | 邏輯與運(yùn)算符 | && | 雙目運(yùn)算符,具有左結(jié)合性 |
12 | 邏輯或運(yùn)算符 | || |
雙目運(yùn)算符,具有左結(jié)合性 |
- 注意點(diǎn):
對于非Boolean類型的數(shù)值, 邏輯運(yùn)算符會將其悄悄咪咪轉(zhuǎn)換為Boolean類型來判斷
-
邏輯與
- 如果條件A不成立, 則返回條件A的數(shù)值本身
- 如果條件A成立, 不管條件B成不成立都返回條件B數(shù)值本身
result = null && 0; console.log(result); // null var result = "123" && "abc"; console.log(result); // "abc" result = "123" && 0; console.log(result); // 0
-
邏輯或
- 如果條件A不成立, 則不管條件B成不成立都返回條件B數(shù)值本身
- 如果條件A成立, 則返回條件A的數(shù)值本身
var result = null || 0; console.log(result); // 0 result = "123" || "abc"; console.log(result); // "123" result = "123" || 0; console.log(result); // "123"
逗號運(yùn)算符
- JavaScript逗號運(yùn)算符和C語言也一樣
- 逗號運(yùn)算符會從左至右依次取出每個表達(dá)式的值, 最后整個逗號表達(dá)式的值等于最后一個表達(dá)式的值
- 格式: 表達(dá)式1譬涡,表達(dá)式2,… …启绰,表達(dá)式n;
var a, b, c, d; /* 1.先計算表達(dá)式1, a = 2 2.再計算表達(dá)式2, b = 12 3.再計算表達(dá)式3, c = 5 4.將表達(dá)式3的結(jié)果返回給d */ d = (a = 1 + 1,b = 3 * 4, c = 10 / 2); console.log(d); // 5
三目運(yùn)算符(條件運(yùn)算符)
- JavaScript三目運(yùn)算符和C語言也一樣
- 格式: 條件表達(dá)式 ? 語句1 : 語句2;
// 彈第一個 true?alert("語句1") : alert("語句2"); // 彈第二個 false?alert("語句1") : alert("語句2");