表達(dá)式和運(yùn)算符
運(yùn)算符
| 運(yùn)算符 |
說(shuō)明 |
示例 |
| + |
加法 |
3+4 //7 |
| - |
減法 |
4-2 //2 |
| / |
除法 |
4/2 //2 |
| * |
乘法 |
3*4 //12 |
| % |
取余 |
4%3 //1 |
| - |
負(fù)號(hào) |
-4 |
| + |
正號(hào) |
+4 |
| ++ |
自增 |
++x, x++ |
| -- |
自減 |
--x,x-- |
自增和自減
前置自增(自減),優(yōu)先增加(減少),然后賦值給變量;
后置自增(自減),優(yōu)先賦值給變量,然后增加(減少);
如果自增(自減)不賦值給其他變量,前置后置效果是一樣的;
let number;
let number1 = 10;
number = ++number1;
console.log(number, number1); // 11 11
number = number1++;
console.log(number, number1); // 11 12
number = --number1;
console.log(number, number1); // 11 11
number = number1--;
console.log(number, number1); // 11 10
number1++;
console.log(number1); // 11
++number1;
console.log(number1); // 12
運(yùn)算符優(yōu)先級(jí)
高優(yōu)先級(jí)運(yùn)算優(yōu)先低優(yōu)先級(jí)運(yùn)算符,搞不清楚時(shí),善用括號(hào)
比較運(yùn)算符
- ===,嚴(yán)格相等,引用的是相同的對(duì)象,或者擁有相同類型(基本類型)和相同的值;
- ==,非嚴(yán)格相等,屬于同一個(gè)對(duì)象,或者強(qiáng)制轉(zhuǎn)化為相同的值;
let num = 33;
let str = '33';
console.log(num === str); // false
console.log(num == str); // true
- 關(guān)系運(yùn)算符
小于(<), 小于等于(<=), 大于(>), 大于等于(>=)
比較運(yùn)算符比較的是擁有自然排序特性的數(shù)據(jù)類型,比如,字符串,數(shù)字;
比較數(shù)字
- NaN與任何值不相等,包括自己(NaN)
- 小數(shù)比較時(shí),特別注意,他們之間不要直接比較,而是通過(guò)差值和Number.EPSILON比較;
// 因?yàn)殡p精度問(wèn)題,此循環(huán)會(huì)一致運(yùn)行的
let number = 0.1;
while (true) {
number += 0.1;
if (number === 0.3) break;
console.log(number);
}
let number = 0.1;
while (true) {
number += 0.1;
if (Math.abs(number - 0.3) < Number.EPSILON) break;
console.log(number);
}
真值和假值
- 假值
- undefined
- null
- false
- 0
- NaN
- 除了假值,全為真值,驚喜不
與,或和非
| 與(&&) |
或(||) |
非(!) |
| 同時(shí)滿足為真 |
滿足一個(gè)條件即為真 |
取反 |
| x |
y |
x&&y |
| false |
false |
false |
| true |
false |
false |
| false |
true |
false |
| true |
true |
true |
| x |
y |
x||y |
| false |
false |
false |
| true |
false |
true |
| false |
true |
true |
| true |
true |
true |
| x |
!x |
| false |
true |
| true |
false |
條件運(yùn)算符
表達(dá)式1 ? 表達(dá)式1為true表達(dá)式 : 表達(dá)式1為false表達(dá)式
位運(yùn)算符
| 運(yùn)算符 |
描述 |
示例 |
| & |
位與 |
0b1 & 0b0 = 0b0 |
| | |
位或 |
0b1 | 0b0 = 0b1 |
| ^ |
位異或 |
0b1 ^ 0b0 = 0b1, 0b1 ^ 0b1 = 0b0 |
| ~ |
位非 |
~0b1 = 0b0, ~0b0 = 0b1 |
| << |
左移位 |
0b1 << 1 = 0b10 |
| >> |
右移位 |
0b10 >> 1 = 0b1 |
| << |
補(bǔ)零右移位 |
1 << 1 = 0b10 |
類型判斷運(yùn)算符
| 表達(dá)式 |
返回值 |
| typeof undefined |
"undefined" |
| typeof null |
"object" |
| typeof {} |
"object" |
| typeof true |
"boolean" |
| typeof 1 |
"number" |
| typeof "" |
"string" |
| typeof Symbol() |
"symbol" |
| typeof function(){} |
"function" |
解構(gòu)賦值
解構(gòu)賦值,允許把一個(gè)對(duì)象或者數(shù)組分解成多個(gè)單獨(dú)的值
const obj = { a: 2, b: 3};
let {a, b} = obj;
console.log(a, b); //2, 3
const arr = [1, 2, 3];
let [a, b] = arr;
console.log(a, b); //1, 2
const arr = [1, 2, 3, 4];
let [a, b, ...rest] = arr;
console.log(a, b, rest); //1, 2, [3, 4]
展開(kāi)運(yùn)算符(...),應(yīng)用于數(shù)組或者對(duì)象。 一個(gè)對(duì)數(shù)組或者對(duì)象進(jìn)行展開(kāi)插值 一個(gè)是對(duì)數(shù)組或者對(duì)象進(jìn)行局部的賦值
對(duì)象和數(shù)組運(yùn)算符
| 運(yùn)算符 |
描述 |
| . |
成員訪問(wèn) |
| [] |
成員訪問(wèn) |
| in |
判斷屬性是否存在 |
| new |
實(shí)例化對(duì)象 |
| instanceof |
原型鏈測(cè)試 |
| ... |
展開(kāi)運(yùn)算符 |
| delete |
刪除運(yùn)算符 |