详细

【JS系列3】 javascript 运算符

1. 算术运算符

1-1 运算符

  • + 功能:①对数字进行代数求和 ②对字符进行连接操作 ③将一个数字转换成字符串(数字 + 空字符串)
  • - 功能:①对操作数进行取反操作 ②对数字进行减法操作 ③将字符串转成数值(数值型字符串 - 0)
  • * 功能:对两个运算数进行乘法运算
  • / 功能:对两个运算数进行除法运算
  • % 功能:返回两个除数的余数

1-2 复合赋值运算符

  • += 、-= 、*= 、/= 、%=

2. 自增与自减

2-1 功能相反

  • ++ 对唯一的运算数进行递增操作(每次加1)
  • — 对唯一的运算数进行递减操作(每次减1)

2-2 规则相同

  • 运算数必须是一个变量、数组的一个元素或者对象的属性
  • 如果运算符是非数值的,则运算符会将它转成数值

2-3 符号位置决定运算结果

  • 运算数之前:先进行递增(递减)操作,再进行求值
  • 运算数之后:先求值,再进行递增(递减)操作

3. 关系运算符

3-1 大小关系检测

  • 运算符:< 、<= 、>= 、>
  • 操作规则:
数值与数值的比较比较它们的代数值
仅一个运算数是数值将另一个运算数转换成数值并比较它们的代数值
字符串间的比较逐个字符比较它们的Unicode数值
字符串与非数值的比较将运算数转换成字符串比较
运算数既非数字也非字符串返回false
与NaN的比较返回false
``
#### 3-2 等值关系检测
* 相等比较
```js
①操作符
== 比较两个运算数的返回值看是否相等
!= 比较两个运算数的返回看是否不相等
②类型转换
布尔值:true 1 false 0
对象: 调用valueOf()基本类型
字符串与数值的比较:字符串转换为数值
③比较原则
null与undefined :相等、比较前不进行任何转换
NaN:与任何数值都不相等包括其自身
对象:是否属于同一对象
  • 相同比较
运算符
=== 比较两个运算数的返回值及数据类型是否相同
!== 比较两个运算数的返回值及数据类型是否不同
比较原则
值类型间比较只有数据类型且数值相等时才能够相同
值类型与引用类型比较肯定不同
引用类型间比较比较它们的引用值内存地址

4. 对象运算符

  • in:判断左侧运算数是否为右侧预算数的成员
  • instantof 判断对象实例是否属于某个类或构造函数
  • new根据构造函数创建一个新的对象,并初始化该对象
  • delete 删除指定对象的属性,数组元素或变量
  • .及[] 存储对象和数组元素
  • ()函数调用,改变运算运算符优先级

5. 逻辑运算符

5-1 !逻辑非

  • 返回值:
true
空字符串0nullNaNundefined
false
对象非空字符串非0数值Infinity
  • 特性
    • 如果运算数的值为false则返回true,否则返回false
    • 连续使用两次,可以将任意类型转为布尔型值

5-2 &&逻辑与

  • 规则
第一个操作数是对象返回第二个操作数
第二个操作数是对象第一个操作数值为true时返回该对象
两个操作数都是对象返回第二个操作数
一个操作数是null返回null
一个操作数是NaN返回NaN
一个操作数是undefined返回undefined
  • 特性
当且仅当两个运算数的值都是true时才返回true否则返回false
短路操作 当第一个操作数的值是false则不在对第二个操作数进行求值

5-3 ||逻辑或

  • 规则
第一个操作数是对象返回第一个操作数
第二个操作数是对象第一个操作数值为false时返回该对象
两个操作数都是对象返回第一个操作数
两个操作数是null返回null
两个操作数是NaN返回NaN
两个操作数是undefined返回undefined
  • 特性
当且仅当两个运算数的值都是false时才返回false否则返回true
如果第一个操作数值为true则不会对第二个操作数进行求值

6. 位运算符

6-1 基础知识

  • 类型
有符号数值位 前31为符号位 第32位 0正数 1负数
无符号只能是正数第32位表示数值数值范围可以加大
  • 数值范围 -2147483648~2147483647
  • 存储方式
正数纯2进制存储,31位中每一位表示2的幂用0补充无用位
负数:2进制补码存储
  • 补码的计算步骤:
确定该数字的非负版本的二进制表示
求得二进制反码把0替换为1把1替换为0
在二进制反码上加1*
  • 当做0来处理的特殊值:NaN,Infinity

6-2 逻辑位运算

  • 返回值为1:
按位非~ 0
按位与& 对应位全为1
按位或| 任何一位是1
按位异或^ 既不同时为0也不同时为1
  • 返回值为0:
按位非~ 1
按位与& 任何一位是0
按位或| 对应位全0
按位异或^ 对应位全0或全1

6-3 位移操作

  • 左移<<
将数值的所有位左移指定的位数
所有空位用0补充
左移1位对其乘2左移2位对其乘4以此类推
  • 有符号右移>>
将数值的所有位右移指定的位数
移出的位被舍弃
保留符号位
右移1位对其除2右移2位对其除4yicileixi,以此类推
  • 无符号右移>>>
正数与有符号右移结果相同
负数会出现无限大的数值
* 无符号右移与带符号右移的区别就是 无符号始终补0*

6-4 复合赋值运算符

  • 位操作与符号结合,复合赋值不会有性能方面的提升

7. 其它运算符

  • typeof 类型判定运算符
  • ?:条件运算符,简洁的if else
  • ,逗号,在一行语句中执行多个不同的操作
  • void 舍弃运算数的值,返回undefined作为表达式的值