一.算术运算符
写在最前面: 不同数据类型请不要加起来,别整个1+'2'
-
number运算:
1.加+减-乘*除/
2.余数 x%3 (x除以3取余)
3.指数 x**4 (x的4次方)
4.自增自减 x++/++x/x--/--x (x在前,表达式的值取自增前的值;x在后,表达式的值取自增后的值)
5.求值运算符 +x (不是取正的意思,就是求一下这个数的值)
6.负数运算符号 -x (x取反) -
string运算:
连接运算'123'+'456'(+连接两个不同的字符串)
字符串只支持连接运算符+ ! -
那如果我非要number和string放一起运算呢?
JS这种情况不会提示出错!
1.数字字符串相加: JS会把数字转换成字符串再跟另外一个字符串相加,最终结果得到一个字符串.
如: '1'+2 的结果为 "12" .
2.数字字符串相减: JS会把字符串转换成数字再和另一个数字进行相减,最终结果得到一个数字.
如: '2'-1 的结果为 1 . -
一个建议
除了for循环, 其他情况尽量少用自增自减运算符, 可以用 x += 1或者 x-= 1 代替.
二.比较运算符
- 各种普通的比较运算符: = > < >= <=
- == 模糊相等 (不要用不要用不要用!!!可能会有类型转换的问题.)
- === 全等于 (JS里只用这个全等于,不要用模糊相等; 基本类型看值是否相等,对象看地址是否相等)
- != 不模糊相等
- !== 不全等于 ([] !== [] 空数组不全等于空数组; {} !== {} 空对象不全等于空对象; NaN !== NaN)
三.布尔运算符
- 或 且 非
或: || (只要有一个true,就返回true)
且: && (只要有一个false,就返回false)
非: ! - 短路逻辑
1.console && console.log && console.log("hi!")
↑这种写法叫做防御性编程,以防console不存在报错,意思是:
如果console存在,且console.log也存在,再执行console.log("hi!")
2.a = a || 100 (a等于a或100)
↑这种写法使a的保底值为100, 意思是当a为真时a不变,a为假时a就等于100
注意:当a为null或undefined时就不能这么写,要这么写function add(n=0){ return ... }
四.二进制位运算符
以下二进制运算符只对二进制数有效
-
或 与 否
或: | (两个二进制位垂直相比,有一位为1,则该位取1)
与: & (两个二进制位垂直相比,两位都为1,则该位取1)
否: ~ -
异或
异或: ^ (两个二进制位垂直相比,两个位相同,则该位取0;两个位不相同,则该位取1) -
左移右移
左移: <<(0b0010 << 1).toString(2) //二进制数0010左移一位,结果为"100"(省略了最前面的0)
右移: >>(0b0011 >> 1).toString(2) //二进制数0011右移一位,结果为"1"(省略了前面三个0,最后一个1移出去了) -
头部补0的右移运算符
头部补0的右移运算符: >>> (在二进制数为正时,这个跟上面的右移运算符是一样的)
以下是一些二进制运算符的神奇用法:
-
用与运算符判断数的奇偶
偶数 & 1 = 0
奇数 & 1 = 1 -
使用 ~ , >> , << , >>> , | 来取正
上面五种效果都是一样的,结果都等于6.如:
console.log(~~ 6.66) //注意是两个~
console.log(>> 6.66)
console.log(<< 6.66)
console.log(>>> 6.66)
console.log(| 6.66) //以上五种方法结果都为打印出6 -
使用 ^ 交换两个值
正常的写法是:
let a=5
let b=7
[a,b]=[b,a] //就这么简单
//此时a值为7,b值为5
非要用运算符交换的写法是:
let a=5
let b=7
a ^= b //其实是a = a ^ b的缩写
b ^= a
a ^= b //用这三行实现交换
//此时a值为7,b值为5
五.其他运算符
-
点运算符
基本语法:对象.属性名 = 属性值
作用:读取对象的属性值
注意:点运算符只可以用在对象上, 如果不是对象那么JS会封装成对象 -
void 运算符 基本语法:
void 表达式或(语句)
作用:如果后面是表达式就求表达式的值,如果后面是语句就执行这个语句,然后得到一个undefined 注意:return 假值 可以阻止默认动作 -
逗号运算符
基本语法:表达式1, 表达式2, ...,表达式n
注意:let a = (1,2,3,4,5) //a的值为5.取最后一个表达式的值
用法如:let f = (x) => (console.log("hi"),x+x) //计算x+x的同时打印hi