JavaScript学习总结-运算符

一、算术运算符

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
      • 与任何数值都不相等包括其本身
    • 对象
      • 是否属于同一对象
        • 是:==
        • 否:!=

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作为表达式的值
坚持原创技术分享,您的支持将鼓励我继续创作!