算数运算符
- number运算
-
加减乘除
-
余数
-1 % 7的余数为 -1//提个负号,加 1 % 7的余数
//正常数学-1 % 7=== 6 % 7 的余数
- 指数
7 ** 2 //49
7 ** 3 //343
- 自增自减
a++//a在前,值为前
++a//a在后,值为后
- 求值运算符
var a = 8
+a
//8,+号后面取任何数,都是取这个数的值
var a = - 8
+a
//-8
- 负数运算符
var a = - 8
-a
//8,正数变负数,负数变正数
string运算符
- 连接运算
'1'+'2'
//"12",只支持加号
js独有:
1 +'2'
//"12",JS会将数字变成字符串再连接
'2' - 1
// 1 ,字符串不支持减号,JS会将字符串变成数字再运算
note:
- 少写自增自减
- 不同类型不要加起来
比较运算符
- ==
0 == []
0 == '0'
0 == '\t'
//ture,但右边三个互不相等
永远不要使用 == ,==自作聪明会自动类型转换,使用 === 。
-
===
- 基本类型看值是否相等
- 对象看地址是否相等
note:
NaN != NaN
[]===[]
//false,对象看地址
{}==={}
//false
布尔运算符
|| && !
console&&console.log&&console.log('hi')
//防止console被改写,不存在console报错
a = a || 100
//100,a的保底值,可能有bug
function add(n =0){
return n+1
}
//最新语法,保底值
add(null)
//1
add(undefined)
//1
二进制运算符
- 或 | 与 & 否 ~(只能二进制运算)
0b11
//3
0b1111 | 0b1010
//15,结果会以十进制展示
(0b1111 | 0b1010).toString(2)
//"1111",二进制展示,两位比较都为0,结果为0,否则为1
(0b1111 & 0b1010).toString(2)
//"1010"两位比较都为1,结果为1,否则为0
(~0b1111).toString(2)
//"-10000"自动补一个1
- 异或 ^
两个位相同,则结果为0,否则为1
(0b1111 ^ 0b1010).toString(2)
//"101"
- 左移右移 << >>
(0b0010 >> 1 ).toString(2)
// "1"
(0b0010 << 1 ).toString(2)
// "100"
(0b0011 >> 1 ).toString(2)
// "1" “吃掉”最右边的 1
(0b0011 << 1 ).toString(2)
// "110"
- 头部补零 的右移运算符 >>>
(0b1011 >>> 1 ).toString(2)
// "101",正数的右移和头部补零的右移完全一样
使用与运算符判断奇偶
奇数 & 1 = 1 偶数 & 1 = 0
7 & 0b001
// 1 奇数
使用~,>>,<<,>>>,|取整
console.log(~~ 6.83)//6
console.log(6.83 >> 0)//6
console.log(6.83 << 0)//6
console.log(6.83 | 0)//6
console.log(6.83 >>> 0)//6
使用^交换a,b的值
最新的语法
var a = 1
var b = 2
[a,b] = [b,a]
//a = 2,b = 1
使用异或运算的原理(二进制)
var a = 5
var b = 2
a ^= b
b ^= a
a ^= b
console.log(a)//2
console.log(b)//5
点运算符
对象.属性名 = 属性名//读取对象的属性值
.只能用到对象上,而
var a = 1
a.toString()
// "1"
JS有特殊的逻辑,点前面不是对象,就封装成对象,一次性的,字符串也是。
-
number会变成Number对象
-
string会变成String对象
-
bool会变成Boolean对象
-
程序员不用上面三类对象,只用简单类型
void运算符
void 表达式或语句
//求表达式的值,或执行语句,void的值总是undefined
需求:
< a heaf="http://baidu.com" onclick="console.log('hi');return false">baidu</a>
//不跳转百度,且打印hi
或者
< a heaf="javascript:viod;" onclick="console.log('hi')">baidu</a>
逗号运算符
(1,2,3)//值为3
let f = (x) => {
console.log('hi')
return x+1
}
可以改成:
let f = x => (
console.log('hi'), x+1
)
//逗号一般配合括号使用
优先级问题
- 不同运算符
一共20个运算符,圆括号优先级最高,剩下详细查看MDN文档运算符优先级。
- 相同运算符
从左到右 a + b + c 从右到左 a = b = c