1.一元运算符
运算符 名称 描述 +a
取正 a
的值本身。-a
取负 a
的负值。++a
前递增 a 的值加 1,然后返回 a。 --a
前递减 a 的值减 1,然后返回 a。 a++
后递增 返回 a,然后将 a 的值加 1。 a--
后递减 返回 a,然后将 a 的值减 1。 delete 对象名.属性名
delete 数组名[索引]
———— 删除一个对象的属性或者一个数组中某一个索引对应的值。 typeof 操作数 typeof (操作数)
———— 返回一个表示 操作数 类型的字符串值。 void 表达式 void (表达式)
———— 表明一个运算没有返回值。
2.算术运算符
运算符 描述 a + b
加法,字符串连接 a - b
减法 a * b
乘法 a / b
除法 a % b
余数 a ** b
求幂
3.赋值运算符
运算符 名称 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
有符号右移位赋值 a >>>= b
无符号右移位赋值
4.相等性运算符
运算符 名称 描述 a == b
相等(不推荐) 先进行强制类型转换,再比较 a
和 b
的值是否相等,如果值相等,则返回 true
。 a === b
全等(推荐) 不进行强制类型转换,再比较 a
和 b
的类型和值是否全相等,需类型和值同时都相等,则返回 true
。 a != b
不相等(不推荐) 先进行强制类型转换,再比较 a
和 b
的值是否不相等,如果值不相等,则返回 true
。 a !== b
不全等(推荐) 不进行强制类型转换,再比较 a
和 b
的类型和值是否不相等,如果类型和值有其一不相等或全不相等,则返回 true
。
5.关系比较运算符
运算符 名称 描述 a < b
小于 如果 a
小于 b
,则返回 true
。 a <= b
小于或等于 如果 a
小于或等于 b
,则返回 true
。 a > b
大于 如果 a
大于 b
,则返回 true
。 a >= b
大于或等于 如果 a
大于或等于 b
,则返回 true
。 属性名 in 对象名
数组索引 in 数组名
———— 如果所指定的对象中存在所指定的属性,则返回 true
。 如果所指定的数组中存在所指定的索引,则返回 true
。 对象名 instanceof 对象类型
———— 如果所判别的对象确实是所指定的类型,则返回 true
。
6.布尔逻辑运算符
运算符 名称 描述 !表达式
逻辑非(not) 如果表达式的计算结果为“假”,则返回 true
,否则返回 false
。如果想得到表达式的计算结果,可以取反两次:!!表达式
。 表达式1 && 表达式2
逻辑与(and) 如果左侧表达式1的计算结果为“假”,则不计算右侧表达式2并返回左侧表达式1的返回值。如果左侧表达式1的计算结果为“真”,则继续计算右侧表达式2并返回右侧表达式2的返回值。 表达式1 || 表达式2
逻辑或(or) 如果左侧表达式1的计算结果为“真”,则不计算右侧表达式2并返回左侧表达式1的返回值。如果左侧表达式1的计算结果为“假”,则继续计算右侧表达式2并返回右侧表达式2的返回值。
7.位运算符
运算符 名称 示例 结果 a ~ b
按位非 NOT ~ 5 -6 a & b
按位与 AND 5 & 1 1 a | b
按位或 OR 5 | 1 5 a ^ b
按位异或 XOR 5 ^ 1 4 a << b
左移位 5 << 1 10 a >> b
有符号右移位 5 >> 1 2 a >>> b
无符号右移位 5 >>> 1 2
8.三元条件运算符
运算符 描述 (expr1) ? (expr2) : (expr3)
在 expr1 为 true
时,返回 expr2,否则返回 expr3。
9.Null运算符
运算符 名称 描述 a?.x
可选链 如果 a 为 null 或 undefined,则返回 undefined,否则 a?.x 的结果与 a.x 的结果相同。 a ?? b
Null合并 如果 a 为 null 或 undefined,则返回 b,否则返回 a。 a ??= b
Null合并赋值 如果 a 为 null 或 undefined,则将 b 赋值给 a,否则返回 a。
10.逗号运算符
示例 描述 let num1 = 1, num2 = 2, num3 = 3;
用来在一条语句中同时声明多个变量 let num = (5, 1, 4, 8, 0); // num 的值为 0
对它的每个操作数从左到右求值,并返回最后一个操作数的值。
11.非运算符
非运算符 名称 描述 ;
分号 分隔语句 ...
省略号 用于剩余运算符和展开运算符。
11.1...
剩余(rest)运算符
剩余运算符 描述 [...变量名]
添加在数组解构赋值左侧的变量名前面,表示将右侧数组内剩余的元素打包(pack)成数组赋给此变量。 {...变量名}
添加在对象字面量解构赋值左侧的变量名前面,表示将右侧对象内剩余的属性打包(pack)成对象赋给此变量。 ...方法形参名
添加在方法声明的形参名前面,表示将剩余的方法实参打包(pack)为数组传递给此方法形参。
11.1.1用于数组解构赋值
//多余元素会被打包成数组
let [a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(rest); // [30, 40, 50]
11.1.2用于对象字面量解构赋值
//多余属性会被打包成对象
const { a, ...others } = { a: 1, b: 2, c: 3 };
console.log(others); // { b: 2, c: 3 }
11.1.3用于方法剩余形参
function sum(...theArgs) {
let total = 0;
for (const arg of theArgs) {
total += arg;
}
return total;
}
console.log(sum(1, 2, 3));
//输出:6
console.log(sum(1, 2, 3, 4));
//输出:10
11.2...
扩展(spread)运算符
扩展运算符 描述 [...数组变量名]
把已存在可迭代对象(比如数组字面量)中的元素解包复制到新可迭代对象中。 {...对象变量名}
把已存在对象字面量中的属性解包复制到新对象字面量中。 方法调用(...数组字面量)
、方法调用(...数组变量名)
用于将可迭代对象(比如数组)解包(unpack)为独立的方法实参。
11.2.1用于解包复制数组
//新数组中的元素全部由老数组中的元素组成。
let arr1 = [1, 2, 3];
let arr2 = [...arr1];
console.log(arr2); // [1, 2, 3]
//新数组中的部分元素由老数组中的元素组成。
//新老数组无重复元素
let arr1 = [1, 2, 3];
let arr2 = [0, ...arr1, 4, 5];
console.log(arr2); // [0, 1, 2, 3, 4, 5]
//新老数组有重复元素,不会去重,仅此复制而已。
let arr1 = [1, 2, 3];
let arr2 = [1, ...arr1, 2, 3];
console.log(arr2); // [1, 1, 2, 3, 2, 3]
11.2.2用于解包复制对象字面量
//新对象中的属性全部由老对象中的属性组成。
let a = { x: 1, y: 2 };
let b = {...a};
console.log(b); // { x: 1, y: 2 }
//新对象中的属性部分由老对象中的属性组成。
//新老对象无同名属性
let a = { x: 1, y: 2 };
let b = {...a, z: 3 };
console.log(b); // { x: 1, y: 2, z: 3 }
//新老对象有同名属性,后面属性的值会覆盖前面属性的值。
let a = { x: 1, y: 2 };
let b = {...a, x: 3 };
console.log(b); // { x: 3, y: 2 }
let a = { x: 1, y: 2 };
let b = { x: 3, ...a };
console.log(b); // { x: 1, y: 2 }
11.2.3用于解包复制方法实参
//方法调用
function myFunction(v, w, x, y, z) {}
const args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/1944.html