表達式和運算符
運算符
運算符 |
說明 |
示例 |
+ |
加法 |
3+4 //7 |
- |
減法 |
4-2 //2 |
/ |
除法 |
4/2 //2 |
* |
乘法 |
3*4 //12 |
% |
取余 |
4%3 //1 |
- |
負號 |
-4 |
+ |
正號 |
+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ōu)先級
高優(yōu)先級運算優(yōu)先低優(yōu)先級運算符紫皇,搞不清楚時聪铺,善用括號
比較運算符
- ===查刻,嚴格相等穗泵,引用的是相同的對象佃延,或者擁有相同類型(基本類型)和相同的值茎截;
- ==企锌,非嚴格相等撕攒,屬于同一個對象抖坪,或者強制轉(zhuǎn)化為相同的值;
let num = 33;
let str = '33';
console.log(num === str); // false
console.log(num == str); // true
- 關(guān)系運算符
小于(<), 小于等于(<=), 大于(>), 大于等于(>=)
比較運算符比較的是擁有自然排序特性的數(shù)據(jù)類型擦俐,比如蚯瞧,字符串埋合,數(shù)字甚颂;
比較數(shù)字
- NaN與任何值不相等振诬,包括自己(NaN)
- 小數(shù)比較時衍菱,特別注意梦碗,他們之間不要直接比較洪规,而是通過差值和Number.EPSILON比較斩例;
// 因為雙精度問題从橘,此循環(huá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
- 除了假值,全為真值旗吁,驚喜不
與停局,或和非
與(&&) |
或(||) |
非(!) |
同時滿足為真 |
滿足一個條件即為真 |
取反 |
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 |
條件運算符
表達式1 ? 表達式1為true表達式 : 表達式1為false表達式
位運算符
運算符 |
描述 |
示例 |
& |
位與 |
0b1 & 0b0 = 0b0 |
| |
位或 |
0b1 | 0b0 = 0b1 |
^ |
位異或 |
0b1 ^ 0b0 = 0b1, 0b1 ^ 0b1 = 0b0 |
~ |
位非 |
~0b1 = 0b0码倦, ~0b0 = 0b1 |
<< |
左移位 |
0b1 << 1 = 0b10 |
>> |
右移位 |
0b10 >> 1 = 0b1 |
<< |
補零右移位 |
1 << 1 = 0b10 |
類型判斷運算符
表達式 |
返回值 |
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)賦值,允許把一個對象或者數(shù)組分解成多個單獨的值
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]
展開運算符(...)厢钧,應(yīng)用于數(shù)組或者對象。 一個對數(shù)組或者對象進行展開插值 一個是對數(shù)組或者對象進行局部的賦值
對象和數(shù)組運算符
運算符 |
描述 |
. |
成員訪問 |
[] |
成員訪問 |
in |
判斷屬性是否存在 |
new |
實例化對象 |
instanceof |
原型鏈測試 |
... |
展開運算符 |
delete |
刪除運算符 |