算术运算符
- number 运算
- 加减乘除
let a = 1
let b = 2
// 加
let c = a + b
//减
let c = a - b
//乘
let c = a * b
//除
let c = a / b
- 余数
let a = 7
c = a % 2
在数学运算中,a % b = (a + n*b)% b
但在 js 中不一定如此
// js 中 负数 % x = 负数
-1 % 7 // -1
- 指数
2 ** 3 // 8
- 自增自减
i++
++i
i--
--i
在 自增自减 中,若 i 在前,值为前 ; i在后, 值为后
let a = 10
a++ //a++的值为10
let b = 10
++b //++b的值为11
为了防止将其值搞混,我们可以用 i+=1 或 i-=1 来替代 自增自减
- 求值运算符
let a = -8
+a // +a === -8
- 负数运算符
let a = -8
-a // -a === 8
- string 运算
string 运算符只有 +
'123' + '456' // '123456'
'1' + 2 === '12'
'2' - 1 === 1
//这两种写法虽然可以得到一个值,但是不应该这样写
比较运算符
>
<
>=
<=
== //模糊相等
!= //模糊不相等
=== //绝对相等
!== //绝对不相等

- === 运算符
规则 :
类型相同看值是否相等;
如果是对象,看地址是否相等
[] !== [] (地址不同)
{} !== [] (地址不同)
一个特殊情况
NaN !== NaN
布尔运算符
||
&&
!
- 防御性编程(防止被篡改)
console && console.log && console.log('hi')
- ||短路逻辑
a = a || 100 //100为保底值
使用 ||短路逻辑 会有问题,如果 a 为falsy值(0,NaN,null,undefined,''),那么,也会自动判断为false,执行保底值
function add(n){
n = n || 0;
return n+1;
}
//我们可以将其改写成
function add(n=0){
return n+1
}
二进制运算符
- 或 |
比较两个二进制数,两个都为0,则为0,否则为1
- 与 &
比较两个二进制数,两个都为1,则为1,否则为0
-
否 ~
-
异或 ^
比较两个二进制数,两个相同为0,否则为1
- 左移 << ;右移 >>
整体向左/向右 移动一位
-
头部补零的右移运算符 >>>
-
使用运算符计算奇偶
x & 1 === 0 //偶数
x & 1 === 1 //奇数
- 使用运算符来取整
我们可以利用 位运算 会消除小数的特性来取整,当然也可以使用 window.parseInt()来取整
console.log(3.4 >> 0)
console.log(3.4 >>> 0)
console.log(3.4 << 0)
console.log(3.4 | 0)
console.log(~~ 3.4)
- 使用运算符交换 a b 的值
//使用 JS 来实现
let a =5;
let b = 8;
[a,b] = [b,a]
//使用 ^ 来实现
let a =5;
let b = 8;
a ^= b;
b ^= a;
a ^= b;
点运算符
- 语法:对象.属性名 = 属性值
我们发现,当我们想要将 number 转为 string 时,会使用 1..toString(),但1不是对象,是数字
其实,js会自动使用new Number封装数字,调用其Number的prototype,调用完后在将封装的number删除
void运算符
-
语法:void 表达式或语句
-
作用:求表达式的值,返回undefined或执行语句
-
需求:

我们可以通过其实现,点击一个 a标签, 但什么都不发生
逗号运算符
let a = (1,2)
// a === 2
逗号运算符会默认返回最后一个值,利用中国特性,我们可以改写函数
let fn = x => {console.log('hi'); return x+1}
//我们可以改写为
let fn = x => (console.log('hi'),x+1)
运算符优先级
详细的运算符优先级常考mdn
其中优先级最高的是 圆括号 (), 最低的是 逗号 ,
同运算符的情况下,一般是从左到右,但当运算符是赋值 = 时,顺序为从右到左
资料参考来源:饥人谷