算数运算符
number运算
- 加减乘除
- 余数 x % 7
-1 % 7 //-1
- 指数 x ** 3
- 自增自减x++/++x/x--/--x 尽量少使用自增自减
var a = 1
a++ // 1
++a // 2
- 求值运算符 +X
var a = 8
+a
8
- 负数运算符 -x
var a = -8
-8
8
string运算符
- 连接运算 '123'+'456'
问?
1 + '2'
"12"
先把数字变成字符串
'2' - 1
1
由于字符串不支持减号,所以把字符串变成数字
不同类型的不要加起来
比较运算符
-
大于
- < 小于
-
= 大于等于
- <= 小于等于
- == 模糊相等
- != 不模糊相等
- === 全等
- !== 不全等
JS三位一体
0 == []
0 == '0'
0 == '\t'
但是右边三个互不相等
永远不要使用 ==,用 ===代替
问题在于:==会自动类型转换
基本类型看值是否相同
对象看地址是否相等
{} !== {} [] !== [] 都不相等,地址不同只是恰巧都为空
唯一特列: NaN !== NaN
布尔运算符
或且非
- ||
- &&
- !
短路逻辑
- console && console.log && console.log('hi')
- 可以简写成: console?.log?('hi')
- 防止console被改写,console存在且console.log存在
- 以防console不存在报错
- a = a || 100
- 最新写法,写到参数中function add(n=0)
- a的保底值
二进制运算符
或、与、否
- | 两个位都为0,则结果为0,否则为1
- & 两个都是1都为1,否则为0
- ~
异或
- ^
- 两个位相同,则结果为0,否则为1
左移右移 << >>
头部补零的右移运算符
- ( >>> )
使用与运算符判断奇偶
- 代码
- 偶数 & 1 = 0
- 奇数 & 1 = 1
使用 ~, >>, <<, >>>, | 取整
console.log(~~ 6.83) //二进制取反,位运算不支持小数,会自动抹去小数,两次取反获得二进制整数
console.log(6.83 >> 0) //什么都不动 但是会消除小数
console.log(6.83 << 0)
console.log(6.83 | 0) // 抹去小数
console.log(6.89 >>> 0)
使用 ^ 来交换a b 的值
var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
console.log(a) //8
console.log(b) //5
点运算符
语法
- 对象.属性名 = 属性值
- 读取对象的属性值
- 点只能用在对象上面
- 如果a不是对象,用点运算符时会自动将他变成对象,先搞出一个封装对象,然后调用,然后直接删除这个封装对象,每次.都会创建不一样的对象
- number会变成Number对象
- string会变成String对象
- bool会变成 Boolean对象
- 以上三个和 == ++ 永远不要用
var a = 1
a.toString =1
"1"
void运算符
语法
- void表达式或语句
作用
- 求表达式的值,或执行语句
- 然后void的值总为undefined
void console.log('hi')
hi
undefined
需求
- 你需要一个a标签但是不让他有任何的动作
- href="javascript:;"
逗号运算符
语法
- 表达式1,表达式2,...
作用
- 将表达式n的值作为整体的值
使用
- let a = (1,2,3,4,5)
- 那么a的值就是5
- let f = (x) => (console.log('平方值为'),x*x)
- 括号不能省略
运算符优先级
- 圆括号优先级最高
- 会用圆括号就行
不同运算符
相同运算符
- a + b + c从左到右
- a = b = c从右到左
==不学
优先级不学