一、算术运算符
1.简单运算符
+ 对数字进行代数求和,如1+2
对字符串进行连接操作,如“abc”+"def"
将一个数值转换成字符串(数值+字符串),如23+“ab”
- 对数据进行减法,如8-2
“取反”,如-5
将字符串转换成数值,数值型字符串-0,如“21”-0
* 对两个运算数进行乘法运算
同号得正、异号得负
/ 对两个运算数进行除法运算
同号得正、异号得负
% 返回两个数相除的余数
和第一个运算数的符号相同
2.符合赋值运算符
+= 如a+=2 => a = a + 2
-= 、 *= 、 /=、 %=原理相同
二、自增与自减
1.功能相反
++ 递增
-- 递减
2.规则相同
运算数必须是一个变量,数组的一个元素或者对象的属性
如果运算就是非数值则运算符会将它转成数值
3.符号位置决定运算结果
运算数之前:先进行递增或者递减,再求值
运算数之后:先求值,再进行递增或递减操作
三、关系运算符
1.大小关系检测
1)运算符
< 如果a小于b,则返回true,否则返回false.
<= 如果a小于等于b,则返回true,否则返回false.
>= 如果a大于等于b,则返回true,否则返回false.
> 如果a大于b,则返回true,否则返回false.
2)操作规则
数值与数值的比较:代数值的比较
仅一个运算数时数值:将另一个运算数转化为数值,再进行代数值的比较
字符串间的比较:逐字符比较他们的Unicode数值
字符串与非数值的比较:将运算数转化成字符串比较
运算数既不是数字也不是字符串:转为数值或字符串进行比较
运算数无法被转化成数值或字符串:返回值为false
与NaN的比较:返回值为false
2.等值关系检测
1)相等比较
操作符:== 比较两个运算数的返回值是否相等
!= 比较两个运算数的返回值是否不相等
类型转换:布尔值 true->1, false->0
对象调用valueOf() -> 基本类型
字符串与数值的比较 ->字符串转为数值
比较规则:null与undefined 相等 比较前不进行任何转换
NaN与任何数值都不想等,包括自身
对象:是否属于同一对象 ->是(==);否(!=)
2)相同比较
操作符:=== 比较两个运算数的返回值和数据类型是否相等
!== 比较两个运算数的返回值和数据类型是否不相等
比较规则:值类型间比较 只是数据类型相同,且数值相等时才能够相同
值类型与引用类型比较 肯定不相同
引用类型间比较 比较他们的引用值
四、对象运算符
in 判断左列运算数是否为右侧运算数的成员
instancesof 判断对象实例是否属于某个类或构造函数
new 根据构造函数创建一个新的对象,并初始化该对象
delete 删除指定对象的属性,数组元素或变量
. 和[] 存取对象和数组元素
{}函数调用,改变运算符优先级
五、逻辑运算符
!逻辑非 返回值 true(空字符串、0、null、NaN、undefined)
false(对象、非空字符串、非0数值(Infinity))
特性 如果运算数的值为false则返回true,否则返回false,连续使用两次!,可将任意类型转换为布尔类型
&& 逻辑与
1)规则:第一个操作数是对象,返回第二个操作数
第二个操作数是对象,第一个操作数的值为true时返回该对象
两个操作数都是对象,返回第二个操作数
一个操作数是null,返回null
一个操作数是NaN,返回NaN
一个操作数是undefined,返回undefined
2)特性:当且仅当两个运算数的值都是true,才返回true,否则返回false
短路操作 当第一个操作数的值是false则不在对第二个操作数进行求值
|| 逻辑与
1)规则:第一个操作数是对象,返回第一个操作数
第一个操作数值为false,返回第二个操作数
两个操作数都是对象,返回第一个操作数
两个操作数是null,返回null
两个操作数是NaN,返回NaN
两个操作数是undefined,返回undefined
2)特性:当且仅当两个运算数的值都是false,才返回false,否则返回true
短路操作 当第一个操作数的值是true则不在对第二个操作数进行求值
六、位运算符1.基础知识
1)类型:有符号 数值位(前31位);符号位(第32位)--->0正数;1负数
无符号 只能是正数,第32位表示数值,数值范围可以加大
2)数值范围:-214748364~2147483647
3)存储方式:正数->纯二进制存储,31位中的每一位都表示2的幂,用0补充无用位
负数->二进制补码存储,补码的计算步骤:a.确定该数字的非负版本的二进制表示;b.求二进制的反码,即把0变成1,1变成0;c.在二进制反码上加1
4)当做0来处理的特殊值:NaN、Infinity
2.逻辑位运算
1)返回值为1:按位非~ 0;按位与& 对应位全为1;按位或 任何一位是1;按位异或^ 既不同时为0,也不同时为1
2)返回值为0:按位非~ 1;按位与& 任何一位为0;按位或 对应位全是0;按位异或^ 全为0,全为1
3.位移操作
1)左移<< 将数值的所有位左移指定位数,所有空位用0补充,左移1位对其乘2,左移2位对其乘4,以此类推
2)有符号右移>> 将数值的所有位右移指定位数,移出的位被舍弃,保留符号位,右移1位对其除2,右移2位对其除4,以此类推
3)无符号右移>>>正数 与有符号右移结果相同;负数 会出现无限大的数值
4.复合赋值运算符
位操作符与等号结合,复合赋值不会有性能方面的提升。
七、其他运算符
1)?: 条件运算符-->相当于if else
2)typeof 类型判定运算符
3),逗号在一行语句执行多个不同操作
4)void 舍弃运算数的值,返回undefined作为表达式的值
PS:运算符这章比较简单,我只是简单的将思维导图复述出来了,具体的例子练习大家根据自己的情况多尝试!下面补充一下运算符的优先级和结合性。
优先级:指运算符的运算顺序,通俗的说就是先计算哪一部分。
结合性:同一优先级运算符的计算顺序,通俗的说就是从哪个方向算起,是左到右还是右到左。