上鏈接:運算符
一元運算符
一元運算符只有一個操作數(shù)
| 一元運算符 | 名稱 | 語法 | 作用 |
|---|---|---|---|
| delete | 刪除對象屬性 | delete a |
用來刪除對象自身的屬性 |
| void | 放棄 | void |
表示表達式放棄返回值 |
| typeof | 類型檢測 | typeof b |
用來判斷給定對象的類型 |
| ++ | 自增 |
++bb++
|
操作數(shù)增加1 |
| -- | 自減 |
--bb--
|
操作數(shù)減1 |
| + | 一元正號 | +b |
位于操作數(shù)的前面,計算其操作數(shù)的數(shù)值 |
| - | 一元負號 | -b |
位于操作數(shù)的前面,計算其操作數(shù)的數(shù)值,并轉換操作數(shù)的符號 |
typeof運算
| 類型 | 結果 |
|---|---|
| undefined | undefined |
| null | object |
| number | number |
| bigint | bigint |
| string | string |
| symbol | symbol |
| boolean | boolean |
| function | function |
| array | object |
| object | object |
算術運算符
算術運算符以數(shù)值(字面量或變量)作為其操作數(shù),并返回一個單個數(shù)值。
| 算術運算符 | 名稱 | 語法 | 作用 |
|---|---|---|---|
| + | 加法 | a+b |
數(shù)值求和 字符串拼接 |
| - | 減法 | a-b |
數(shù)值求差 數(shù)字字符串轉數(shù)字["1"-0] |
| * | 乘法 | a*b |
數(shù)值求乘積 |
| / | 除法 | a/b |
數(shù)值求商 [ 求商的數(shù)可能為浮點數(shù) ] [除0商為Infinity] |
| % | 求余 | a%b |
數(shù)值求余 |
| ** | 冪 | a ** b |
數(shù)值求余 [冪運算是右結合] |
關系運算符
關系運算符比較兩個操作數(shù)并返回基于比較結果的Boolean值。
| 關系運算符 | 名稱 | 語法 | 作用 |
|---|---|---|---|
| in | 屬性 in obj |
用來判斷對象是否擁有給定屬性 | |
| instanceof | obj instanceof obj2 |
判斷一個對象是否是另一個對象的實例 | |
| < | 小于 | a < b |
判斷a是否小于b |
| > | 大于 | a < b |
判斷a是否大于b |
| <= | 小于等于 | a <= b |
判斷a是否小于等于b |
| >= | 大于等于 | a >= b |
判斷a是否大于等于b |
| == | 相等 | a == b |
判斷a是否等于b |
| != | 不相等 | a != b |
判斷a是否不等于b |
| === | 全等 | a === b |
判斷a是否全等于b,數(shù)值、類型均相等 |
| !== | 非全等 | a !== b |
判斷a是否非全等于b |
instanceof
instanceof運算符用于檢測構造函數(shù)的prototype屬性是否出現(xiàn)在某個實例對象的原型鏈上。
位移運算符
在二進制的基礎上,對數(shù)字進行移動操作
| 位移運算符 | 名稱 | 語法 | 作用 |
|---|---|---|---|
| << | 按位左移運算符 | 9 << 1 |
數(shù)字9左移1位,表示翻2*1倍 |
| >> | 按位右移運算符 | 9>>1 |
數(shù)字9右移1位,表示除2*1,并向下取整 |
| >>> | 無符號右移運算符 | ||
| & | 位與運算 | 每個比特位執(zhí)行與(AND)操作 | |
| | | 位或運算 | 每個比特位執(zhí)行或(OR)操作 | |
| ^ | 位異或運算 | 每個比特位執(zhí)行異或(XOR)操作 | |
| ~ | 位非運算 | 每個比特位執(zhí)行非(NOT)操作 |
邏輯運算符
邏輯運算符典型的用法是用于boolean(邏輯)值運算, 它們返回boolean值。
| 邏輯運算符 | 名稱 | 語法 | 作用 |
|---|---|---|---|
| && | 邏輯與 | expr1 && expr2 |
expr1和expr2都為真,返回真;否則返回假 |
| || | 邏輯或 | expr1 || expr2 |
expr1和expr2都為假,返回假;否則返回真 |
| ! | 邏輯非 | !expr1 |
expr1的真假性改變 |
| !! | 雙重非運算符 | !!expr1 |
顯式地將任意值轉換為對應的布爾值 |
| ?? | 空值合并操作符 | 當左側操作數(shù)為null或undefined時,返回其右側操作數(shù),否則返回左側操作數(shù) |
注意:
- 邏輯運算符有短路特性
- 注意邏輯運算符之間的優(yōu)先級 ! > && > ||
空值合并運算符 ??
| 空值合并操作符 | 邏輯或操作符 |
|---|---|
當左側操作數(shù)為null或undefined時,返回其右側操作數(shù),否則返回左側操作數(shù) |
當左側操作數(shù)為假值時,返回右側操作數(shù),否則返回左側操作數(shù) |
如果左側操作數(shù)為0或''假值的時候,空值合并操作運算符會取左邊操作數(shù);邏輯或操作符會取右側操作數(shù)。
邏輯運算符中的顯著的功能
空值操作運算符(??):當左側操作數(shù)為null或undefined時,返回右側操作數(shù);否則返回左側操作數(shù)。
邏輯或運算符(||):邏輯或操作符會在左側操作數(shù)為假時,返回右側操作數(shù);否則返回左側操作數(shù)。
可選鏈式操作符(?.):當訪問的屬性為null或undefined時,將會跳過此語句;否則執(zhí)行。【有點類似if條件句的簡寫】
<!DOCTYPE html>
<html>
<head>
<title>運算符</title>
</head>
<body>
<script>
"use strict"
let a = 0;
let b = 1;
let c = undefined;
let d = {
"prop": "Prototype",
}
let e = null;
console.log(a || "a1") // a1
console.log(a ?? "a1") // 0
console.log(b || "b1") // 1
console.log(b ?? "b1") // 1
console.log(c || "c1") // c1
console.log(c ?? "c1") // c1
console.log(d.prop?.toUpperCase()) // PROTOTYPE
console.log(d.prop1?.toUpperCase()) // undefined
console.log(e || "e1") // e1
console.log(e ?? "e1") // e1
</script>
</body>
</html>
條件運算符(三元)
condition ? ifTrue : ifFalse
條件運算符把兩個結果的其中一個符合運算邏輯的值返回
逗號操作運算符
逗號操作運算符對它的每個操作數(shù)求值(從左到有),并返回最后一個操作數(shù)的值。
賦值運算符
賦值運算符會將右邊的操作數(shù)的值分配給左邊的操作數(shù)。
| 運算符 | 含義 |
|---|---|
| = | 賦值運算符 |
| += | 賦值求和 |
| -= | 賦值求差 |
| *= | 賦值乘積 |
| /= | 賦值商 |
| %= | 賦值求余 |
| 解構賦值 | 將屬性/值從對象中取出,賦值給其他變量 |
解構賦值
解構賦值語法是一種JavaScript表達式。通過解構賦值,可以將屬性/值從對象/數(shù)組中取出,賦值給其他變量。
解構數(shù)組
- 默認值:
[a, b = 7] = [1]b的值為默認值7。 - 交換變量
[a, b] = [b, a]使用解構表達式交換變量 - 忽略某些值
[a, , c] = [1, 2, 3] - 解構+剩余模式
[a, ...b] = [1, 2, 3]b的取值為[2,3]
剩余元素必須是數(shù)組的最后一個元素,否則會報SyntaxError語法錯誤。
解構對象
// 基本解構
var o = {p: 42, q: true};
var {p, q} = o;
console.log(p); // 42
console.log(q); // true
// 無聲明賦值
var a, b;
({a, b} = {a: 1, b: 2}) // 括號必須寫,否則會被認為是一個塊,而不是一個對象字面量
// 解構之后進行更名
var {p: updatep, q: updateq} = {p: 42, q:45} // 這句話之前必須以分號結尾
console.log(updatap) // 42
console.log(updateq) // 45
// 默認值
var {p = 1, q = 2} = {p: 43};
// 默認值,解構之后進行更名
var {a:aa = 10, b:bb = 5} = {a: 3};
注意事項:
解構對象時會查找原型鏈(如果屬性不在對象自身,將從原型鏈中查找)