上链接:运算符
一元运算符
一元运算符只有一个操作数
一元运算符 | 名称 | 语法 | 作用 |
---|---|---|---|
delete | 删除对象属性 | delete a |
用来删除对象自身的属性 |
void | 放弃 | void |
表示表达式放弃返回值 |
typeof | 类型检测 | typeof b |
用来判断给定对象的类型 |
++ | 自增 |
++b b++
|
操作数增加1 |
-- | 自减 |
--b b--
|
操作数减1 |
+ | 一元正号 | +b |
位于操作数的前面,计算其操作数的数值 |
- | 一元负号 | -b |
位于操作数的前面,计算其操作数的数值,并转换操作数的符号 |
typeof运算
类型 | 结果 |
---|---|
undefined | undefined |
null | object |
number | number |
bigint | bigint |
string | string |
symbol | symbol |
boolean | boolean |
function | function |
array | object |
object | object |
算术运算符
算术运算符以数值(字面量或变量)作为其操作数,并返回一个单个数值。
算术运算符 | 名称 | 语法 | 作用 |
---|---|---|---|
+ | 加法 | a+b |
数值求和 字符串拼接 |
- | 减法 | a-b |
数值求差 数字字符串转数字["1"-0] |
* | 乘法 | a*b |
数值求乘积 |
/ | 除法 | a/b |
数值求商 [ 求商的数可能为浮点数 ] [除0商为Infinity] |
% | 求余 | a%b |
数值求余 |
** | 幂 | a ** b |
数值求余 [幂运算是右结合] |
关系运算符
关系运算符比较两个操作数并返回基于比较结果的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,数值、类型均相等 |
!== | 非全等 | a !== b |
判断a是否非全等于b |
instanceof
instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。
位移运算符
在二进制的基础上,对数字进行移动操作
位移运算符 | 名称 | 语法 | 作用 |
---|---|---|---|
<< | 按位左移运算符 | 9 << 1 |
数字9左移1位,表示翻2*1倍 |
>> | 按位右移运算符 | 9>>1 |
数字9右移1位,表示除2*1,并向下取整 |
>>> | 无符号右移运算符 | ||
& | 位与运算 | 每个比特位执行与(AND)操作 | |
| | 位或运算 | 每个比特位执行或(OR)操作 | |
^ | 位异或运算 | 每个比特位执行异或(XOR)操作 | |
~ | 位非运算 | 每个比特位执行非(NOT)操作 |
逻辑运算符
逻辑运算符典型的用法是用于boolean(逻辑)值运算, 它们返回boolean值。
逻辑运算符 | 名称 | 语法 | 作用 |
---|---|---|---|
&& | 逻辑与 | expr1 && expr2 |
expr1和expr2都为真,返回真;否则返回假 |
|| | 逻辑或 | expr1 || expr2 |
expr1和expr2都为假,返回假;否则返回真 |
! | 逻辑非 | !expr1 |
expr1的真假性改变 |
!! | 双重非运算符 | !!expr1 |
显式地将任意值转换为对应的布尔值 |
?? | 空值合并操作符 | 当左侧操作数为null或undefined时,返回其右侧操作数,否则返回左侧操作数 |
注意:
- 逻辑运算符有短路特性
- 注意逻辑运算符之间的优先级 ! > && > ||
空值合并运算符 ??
空值合并操作符 | 逻辑或操作符 |
---|---|
当左侧操作数为null 或undefined 时,返回其右侧操作数,否则返回左侧操作数 |
当左侧操作数为假值 时,返回右侧操作数,否则返回左侧操作数 |
如果左侧操作数为0或''
假值的时候,空值合并操作运算符会取左边操作数;逻辑或操作符会取右侧操作数。
逻辑运算符中的显著的功能
空值操作运算符(??):当左侧操作数为null或undefined时,返回右侧操作数;否则返回左侧操作数。
逻辑或运算符(||):逻辑或操作符会在左侧操作数为假时,返回右侧操作数;否则返回左侧操作数。
可选链式操作符(?.):当访问的属性为null或undefined时,将会跳过此语句;否则执行。【有点类似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
条件运算符把两个结果的其中一个符合运算逻辑的值返回
逗号操作运算符
逗号操作运算符对它的每个操作数求值(从左到有),并返回最后一个操作数的值。
赋值运算符
赋值运算符会将右边的操作数的值分配给左边的操作数。
运算符 | 含义 |
---|---|
= | 赋值运算符 |
+= | 赋值求和 |
-= | 赋值求差 |
*= | 赋值乘积 |
/= | 赋值商 |
%= | 赋值求余 |
解构赋值 | 将属性/值从对象中取出,赋值给其他变量 |
解构赋值
解构赋值语法是一种JavaScript表达式。通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。
解构数组
- 默认值:
[a, b = 7] = [1]
b的值为默认值7。 - 交换变量
[a, b] = [b, a]
使用解构表达式交换变量 - 忽略某些值
[a, , c] = [1, 2, 3]
- 解构+剩余模式
[a, ...b] = [1, 2, 3]
b的取值为[2,3]
剩余元素必须是数组的最后一个元素,否则会报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};
注意事项:
解构对象时会查找原型链(如果属性不在对象自身,将从原型链中查找)