一、算术运算符
1、运算符
a、+
- 功能
- 对数字进行代数求和
- 对字符串进行连接操作
- 将一个数值转换成字符串(数值+空字符串)
- 字符串拼接
- 字符串+字符串(二者直接拼接)
- 字符串+数值(数值转为字符串再拼接)
b、-
- 功能
- 对操作数进行“取反”操作
- 对数字进行减法操作
- 将字符串转换成数值(数值型字符串 - 0)
c、*
- 功能
- 对两个运算数进行乘法运算
- 符号问题
- 同号得正,异号得负
d、/
- 功能
- 对两个运算数进行除法运算
- 符号问题
- 同号得正,异号得负
e、%
- 功能
- 返回两个除数的余数
- 符号问题
- 和第一个运算数的符号相同
2、复合赋值运算符
- +=、- =、*=、/=、%=
二、自增与自减
1、功能相反
- ++:对唯一的运算数进行递增操作(每次加1)
- —:对唯一的运算数进行递减操作(每次减1)
2、规则相同
- 运算数必须是一个变量、数组的一个元素或者对象的属性
- 如果运算数是非数值的则运算符会将它转成数值
3、符号位置决定运算结果
- 运算数之前:先进行递增(递减)操作,再进行求值
- 运算数之后:先求值,再进行递增(递减)操作
三、关系运算符
1、大小关系检测
a、运算符
- < :如果A小于B,则返回true,否则返回false
- <=:如果A小于等于B,则返回true,否则返回false
- >=:如果A大于等于B,则返回true,否则返回false
- >:如果A大于B,则返回true,否则返回false
b、操作规则
- 数值与数值的比较:比较它们的代数值
- 仅一个运算数是数值:将另一个运算数转换成数值,并比较它们的代数值
- 字符串间的比较:逐字符比较它们的Unicode数值
- 字符串与非数值的比较:将运算符转换成字符串并进行比较
- 运算数即非数值也非字符串:转换成数值或字符串后进行比较
- 运算数无法转换成数值或字符串:返回值为false
- 与NaN的比较:返回值为false
2、等值关系检测
a、相等比较
- 操作符
- ==:比较两个运算数的返回值看是否相等
- !=:比较两个运算数的返回值看是否不相等
- 类型转换
- 布尔值
- true:1
- false:0
- 对象
- 调用valueOf(),基本类型
- 字符串与数值的比较
- 字符串转换为数值
- 布尔值
- 比较原则
- null与undefined
- 相等
- 比较前不进行任何转换
- NaN
- 与任何数值都不相等包括其本身
- 对象
- 是否属于同一对象
- 是:==
- 否:!=
- 是否属于同一对象
- null与undefined
b、相同比较
- 运算符
- ===:比较两个运算数的返回值及数据类型看是否相同
- !==:比较两个运算数的返回值及数据类型看是否不同
- 比较原则
- 值类型比较
- 只有数据类型相同,且数值相等时才能够相同
- 值类型与引用类型比较
- 肯定不相同
- 引用类型间比较
- 比较它们的引用值(内存地址)
- 值类型比较
四、对象运算符
- in:判断左侧运算数是否为右侧运算数的成员
- instancesof:判断对象实例是否属于某个类或构造函数
- new:根据构造函数创建一个新的对象,并初始化该对象
- delete:删除指定对象的属性,数组元素或变量
- .及[]:存取对象或数组元素
- ():函数调用,改变运算运算符优先级等
五、逻辑运算符
1、! 逻辑非
a、返回值
- true
- 空字符串
- 0
- null
- NaN
- undefined
- false
- 对象
- 非空字符串
- 非0数值(Infinity)
b、特性
- 如果运算数的值为false则返回true,否则返回false
- 连续使用两次!,可将任意类型转为布尔值
2、&&逻辑与
a、规则
- 第一个操作数是对象:返回第二个操作数
- 第二个操作数是对象:第一个操作数值为true时返回该对象
- 两个操作数都是对象:返回第二个操作数
- 一个操作数是null:返回null
- 一个操作数是NaN:返回NaN
- 一个操作数是undefined:返回undefined
b、特性
- 当且仅当两个运算数的值都是true时,才返回true,否则返回false
- 短路操作:当第一个操作数的值为false则不再对第二个操作数进行求值
3、||逻辑或
a、规则
- 第一个操作数是对象:返回第一个操作数
- 第一个操作数值为false:返回第二个操作数
- 两个操作数都是对象:返回第一个操作数
- 两个操作数是null:返回null
- 两个操作数是NaN:返回NaN
- 两个操作数是undefined:返回undefined
b、特性
- 当且仅当连个运算数的值都是false时,才返回false,否则返回true
- 如果第一个操作数为true,则不会对第二个操作数进行求值
六、位运算符
1、基础知识
a、类型
- 有符号
- 数值位:前31位
- 符号位:第32位
- 0:正数
- 1:负数
- 无符号
- 只能是正数
- 第32位表示数值
- 数值范围可以加大
b、数值范围
- - 2147483648 ~ 2147483647
c、存储方式
- 正数
- 纯二进制存储
- 31位中每一位表示2的幂
- 用0补充无用位
- 负数
- 二进制补码存储
- 补码的计算步骤
- 确定该数字的非负版本的二进制表示
- 求得二进制反码,既要把0替换为1,把1替换为0
- 在二进制反码上加1
d、当做0来处理的特殊值
- NaN
- Infinity
2、逻辑位运算符
a、返回值为1
- 按位非~:0
- 按位与&:对应位全是1
- 按位或|:任何一位都是1
- 按位异或^:既不同时为0,也不同时为1
b、返回值为0
- 按位非~:1
- 按位与&:任何一位都是0
- 按位或|:对应位全是0
- 按位异或^:对应位全是0或全是1
3、位移操作
a、左移<<
- 将数值的所有位左移指定的位数
- 所有空位用0补充
- 左移1位对其乘2,左移2为对其乘4,以此类推
b、有符号右移>>
- 将数值的所有位右移指定的位数
- 移除位被舍弃
- 保留符号位
- 右移1位对其除2,右移2为对其除4,以此类推
c、无符号右移>>
- 正数:与有符号右移结果相同
- 负数:会出现无限大的数值
4、复合赋值运算符
- 位操作符与等号结合,复合赋值不会有性能方面的提升
七、其他运算符
1、?
- 条件运算符,简洁的if else
2、type of
- 类型判定运算符
3、,
- 逗号,在一行语句中执行多个不同的操作
4、void
- 舍弃运算数的值,返回undefined作为表达式的值