运算符
1.算数运算符
| 运算符 | 描述 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取模(余数) |
| ++ | 自增 |
| -- | 自减 |
| << | 左移,将第一个操作数向左移动指定位数,左边超出的位数将会被清除,右边将会补零。 |
| >> | 右移,将一个操作数的二进制表示形式向右移动指定位数,该操作数可以是数值或者 BigInt 类型。 右边移出位被丢弃,左边移出的空位补符号位(最左边那位)。 该操作也称为“符号位传播右移”(sign-propagating right shift)或“算术右移”(arithmetic right shift), 因为返回值的符号位与第一个操作数的符号位相同。 |
| ** | 求幂,2**3就是2的3次方 |
左移操作符 (<<)
js
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
console.log(a << b); // 00000000000000000000000000010100
// Expected output: 20右移运算符(>>)
js
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
const c = -5; // 11111111111111111111111111111011
console.log(a >> b); // 00000000000000000000000000000001
// Expected output: 1
console.log(c >> b); // 11111111111111111111111111111110
// Expected output: -22.赋值运算符
| 运算符 | 用法 | 等同于 | 描述 |
|---|---|---|---|
| = | x=y | 赋值,把右值赋值给左值 | |
| += | x+=y | x=x+y | 加法赋值,把左值加上右值,再赋值给左值 |
| -= | x-=y | x=x-y | 减法赋值,把左值减上右值,再赋值给左值 |
| *= | x*=y | x=x*y | 乘法赋值,把左值乘上右值,再赋值给左值 |
| /= | x/=y | x=x/y | 除法赋值,把左值除上右值,再赋值给左值 |
| %= | x%=y | x=x%y | 取余赋值,把左值除上右值,再把余数赋值给左值 |
| <<= | x<<=y | x=x<<y | 左移赋值,把左值向左移动右值的位数,再赋值给左值 |
| >>= | x>>=y | x=x>>y | 右移赋值,把左值向右移动右值的位数,再赋值给左值 |
3.比较运算符
| 运算符 | 描述 |
|---|---|
| == | 等于,比较值 |
| === | 绝对等于,比较值和类型 |
| != | 不等于 |
| !== | 不绝对等于(值和类型有一个不相等,或两个都不相等) |
| > | 大于 |
| < | 小于 |
| >= | 大于或等于 |
| <= | 小于或等于 |
4.逻辑运算符
| 运算符 | 描述 |
|---|---|
| && | 且运算,运算符两边都为true才为true,否则为false,或者左边为true则执行右边语句 |
| || | 或运算,运算符两边有一边为true即为true,否则为false,或者左边为true返回左边值,否者返回右边值 |
| ||= | 逻辑或赋值(`x |
| ! | 取反,!true即为false |
| ?? | 空值合并,当左侧的操作数为null或者undefined时,返回其右侧操作数,否则返回左侧操作数。 |
| ??= | 空赋值运算符,仅在 x 是空值(null 或 undefined)时对其赋值。 |
5.可选链运算符
| 运算符 | 描述 |
|---|---|
| ?. | ?. 运算符的功能类似于 . 链式运算符,在引用为空 (nullish ) ( null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。 |
语法
js
obj.val?.prop
obj.val?.[expr]
obj.func?.(args)3.三元运算符
语法
js
条件 ? 为true触发的逻辑 : 为false触发的逻辑7.一元运算符
| 运算符 | 描述 |
|---|---|
| num++ | 先执行逻辑,在将num+1 |
| ++num | 先将num+1,在执行逻辑 |
| num-- | 先执行逻辑,在将num-1 |
| --num | 先将num-1,在执行逻辑 |
8.位运算符
| 运算符 | 描述 | 例子 | 类似于 | 结果 | 十进制 |
|---|---|---|---|---|---|
| & | AND | x = 5 & 1 | 0101 & 0001 | 0001 | 1 |
| | | OR | x = 5 | 1 | 0101 | 0001 | 0101 | 5 |
| ~ | 取反 | x = ~ 5 | ~0101 | 1010 | -6 |
| ^ | 异或 | x = 5 ^ 1 | 0101 ^ 0001 | 0100 | 4 |
| << | 左移 | x = 5 << 1 | 0101 << 1 | 1010 | 10 |
| >> | 右移 | x = 5 >> 1 | 0101 >> 1 | 0010 | 2 |
9.in 运算符
如果指定的属性在指定的对象或其原型链中,则 in 运算符返回 true。
js
prop in object参数:
- prop:一个字符串类型或者 symbol 类型的属性名或者数组索引(非 symbol 类型将会强制转为字符串)。
- object:检查它(或其原型链)是否包含具有指定名称的属性的对象。
返回值:返回一个布尔值
js
// 数组
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees; // 返回 true
3 in trees; // 返回 true
6 in trees; // 返回 false
"bay" in trees; // 返回 false (必须使用索引号,而不是数组元素的值)
"length" in trees; // 返回 true (length 是一个数组属性)
Symbol.iterator in trees; // 返回 true (数组可迭代,只在 ES2015+ 上有效)
// 内置对象
"PI" in Math; // 返回 true
// 自定义对象
var mycar = { make: "Honda", model: "Accord", year: 1998 };
"make" in mycar; // 返回 true
"model" in mycar; // 返回 truein右操作数必须是一个对象值。例如,你可以指定使用String构造函数创建的字符串,但不能指定字符串文字。
js
var color1 = new String("green");
"length" in color1; // 返回 true
var color2 = "coral";
"length" in color2; // 报错 (color2 不是对象)如果你使用 delete 运算符删除了一个属性,则 in 运算符对所删除属性返回 false。
js
var mycar = { make: "Honda", model: "Accord", year: 1998 };
delete mycar.make;
"make" in mycar; // 返回 false
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3];
3 in trees; // 返回 false如果你只是将一个属性的值赋值为undefined,而没有删除它,则 in 运算仍然会返回true。
js
var mycar = { make: "Honda", model: "Accord", year: 1998 };
mycar.make = undefined;
"make" in mycar; // 返回 truejs
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
trees[3] = undefined;
3 in trees; // 返回 true继承属性
如果一个属性是从原型链上继承来的,in 运算符也会返回 true。
js
"toString" in {}; // 返回 true10.运算符优先级
| 优先级 | 分类 | 运算符 | 结合性 |
|---|---|---|---|
| 1 | 后缀运算符 | ( )、[ ]、-> | 从左到右 |
| 2 | 单目运算符 | !、*(指针)、& 、++、--、+(正号)、-(负号) | 从右到左 |
| 3 | 乘法/除法/取余 | *(乘号)、/、% | 从左到右 |
| 4 | 加法/减法 | +、- | 从左到右 |
| 5 | 位移运算符 | <<、>> | 从左到右 |
| 6 | 关系运算符 | <、<=、>、>= | 从左到右 |
| 7 | 相等/不等 | ==、!= | 从左到右 |
| 8 | 按位与 | & | 从左到右 |
| 9 | 按位异或 | ^ | 从左到右 |
| 10 | 按位或 | | | 从左到右 |
| 11 | 逻辑与 | && | 从左到右 |
| 12 | 逻辑或 | || | 从左到右 |
| 13 | 三目运算符 | ? : | 从右到左 |
| 14 | 赋值运算符 | =、+=、-=、*=、/=、 %=、 >>=、 <<=、&=、^=、|= | 从右到左 |
| 15 | 逗号运算符 | , | 从左到右 |
