数学操作符(加、减),位操作符,关系操作符,相等操作符
一元操作符
1.递增/递减操作符
let age =5
console.log(++age) //6
console.log(age++) //5
2.一元加和减
一元加放在变量前面,对数值没有任何影响。
一元减放在变量前面,把数值变为负值。如把1转换为-1
一元加和减操作符主要用于基本的算术,也可以用于数据类型转换
let s1 = "1.1"
s1 = -s1 //变为-1.1
位操作符
10010 //18
补码【不看符号位,取反码,+1,加上原来的符号位】
(1)确定绝对值的二进制表示,如-18=》18
(2)找到数值的反码,0变1,1变0
(3)加1
let num = -18
console.log(num.toString(2)) //"-10010"
默认情况下,ES中所有整数都表示有符号数。
在应用位操作符时,64位数值会转换为32位数值,然后执行位操作。【注】NaN和Infinity在位操作中会被当成0处理
1.按位非(~)
// p61 即所有位0变1,1变0,包括符号位
let num1 = 25
let num2 = ~num1
console.log(num2) //-26
// 等同于数值取反并减1
let num1 = 25
let num2 = -num1 - 1
console.log(num2) //-26
两者结果一样,但位操作的速度快得多。因为位操作是在数值的底层表示上完成的
2.按位与(&)
1 1 1
1 0 0
0 1 0
0 0 0
let res = 25 & 3
console.log(res) //1
3.按位或(|)
1 1 1
1 0 1
0 1 1
0 0 0
let res = 25 | 3
console.log(res) //27
4.按位异或(^)
1 1 0
1 0 1
0 1 1
0 0 0
let res = 25 ^ 3
console.log(res) //26
5.左移(<<)
let oldValue = 2
let newValue = oldValue << 5 //左移五位,64
左移保留它所操作数值的符号
6.有符号右移(>>)
let oldValue = 64
let newValue = oldValue >> 5 //右移五位,2
7.无符号右移(>>>)
对正数无let oldValue = 64
let newValue = oldValue << 5 //又移五位,2影响,对负数来说,将符号位一起右移
let oldValue = -64 //11111111111111111111111111000000在计算机中用补码存储,方便计算
let newValue = oldValue >>> 5 //134217726
布尔操作符
1.逻辑非(!)
2.逻辑与(&&)
3.逻辑或(||)
let myObject = preferredObject || backObject
preferredObject 是首选值,如果它不是null,它就会被赋值给myObject,如果它是null,backObject则会被赋值给myObject
let flag1 = null || undefined; //flag1 = undefined
let flag2 = null && undefined; //flag2 = null
if (flag1 === true) console.log('flag1');
if (flag2 === false) console.log('flag2');
对于 || 来说,如果条件判断结果为 true 就返回第一个操作数的值,如果为 false 就返回第二个操作数的值。
&& 则相反,如果条件判断结果为 true 就返回第二个操作数的值,如果为 false 就返回第一个操作数的值。
|| 和 && 返回它们其中一个操作数的值,而非条件判断的结果。
乘性操作符
1.乘法操作符(*)
如果有不是数值的操作符,则先在后台用Number()转换后,再计算
2.除法操作符(/)
3.取模操作符(%)
指数操作符
Math.pow() **
Math.pow(3,2) 相当于 3 **2
let num = 3
num **=2 //9
加性操作符
1.加法操作符(+)
2.减法操作符(-)
关系操作符
< , > , <=, >=
let res = 5 > 3 //true
let res = "Brick" < "alphabet" //true B:66 a:97
let res = "22" < "3" //true "2":50 "3":51
let res = "22" < 3 //false "22"会被转换为22
let res = "a" < 3 //false "a"会被转换为NaN,涉及NaN结果就为false
相等操作符
1.等于(==
)和不等于(!=
)
2.全等(===
)和不全等(!==
)
由于等于和不等于涉及类型转换问题,所以推荐使用全等和不全等
条件操作符
let max = (num1 > num2)? num1:num2
赋值操作符
=,*=,/=…
逗号操作符
let num1 = 1, num2 = 2, num3 = 3
let num =(5, 1, 4, 8, 0) //num = 0,不常见