九、JS中的运算符

1、运算符两侧的操作数的数据类型一定是一样的,如果不一样,会发生隐式类型转化
2、NaN与任何数据计算都是NaN,在关系运算符中任何数据和NaN进行比较,结果都是false

1、运算符从功能上分类:

  • 1、算数运算符:+ - * / %

    • 优先级:* / % 高于+ -,如果优先级一样,则从左到右计算(左结合性)
      • 加号运算符
        • 任何非数值(非字符串)的数据在参与加法运算之前,都会自动隐式转化成数值类型,再参与计算(true→1、null→0)
        • 任何数据和字符串相加,+就变成了字符串拼接运算符,不再是加号
      • 减号运算符
        • 任何非数值(非字符串)的数据在参与减法运算之前,都会自动隐式转化成数值类型,再参与计算
        • 任何数据和字符串相减,都会尝试把字符串转化成数字,再进行运算
      • 乘号运算符
        • 同减号运算符
      • 除号运算符
        • 1 / null //Infinity(无穷大,null转化成0)
      • 除余运算符
        • 3 % 0 //NaN
        • 10 % -3 //1
        • -10 % 3 //-1
        • 在除余时,会对参加运算的数先取绝对值,最后的结果与被除数的正负值相同。
  • 2、赋值运算符:=、+=、-=、*= 、/=、%=(从后向前计算)

    • 优先级低于算术运算符
    • = 有副作用,整体也有一个值,是左值,c = 110,c是110,110是110,c=110也是110
  • 3、自增自减运算符:++、- -(一元运算符)

    • ++在前和++在后在整体上的值是有区别的,但操作数的值肯定加1
    • a++整体的值是一个旧值,没有加1的值,操作数(a)的值加1
    • ++a整体的值是一个新值,加1后的值,操作数(a)的值加1
  • 4、关系运算符(>、<、>=、<=、==、===、!=、!==)

    • 对非数值类型的数据,会先转换成数值类型
    • 任何数据和NaN比较,结果都是false
    • 运算符两侧操作数的数据类型要一致,如果不一致,会发生类型转化
    • undefined会尝试转化成number,und转成number结果是NaN
    • 字符串的比较会转成ASCLL码
  • 5、逻辑运算符(逻辑与&&、逻辑或||、逻辑非!)

    • 逻辑与:只有两个操作数,都为true,结果才为true
    • 逻辑或:只要有一个操作数为true,结果就为true
    • 逻辑非:一元运算符,如果true,逻辑非后,就为false,如果是false,逻辑非后,就为true。
    • 0会隐式转化成false,但是整体的值不是转化后的值,整体的值是转化之前的值,会输出0而不是false
    • 使用逻辑运算符进行逻辑运算时,操作数如果不是布尔值,会发生隐式类型转化,转化成布尔值(undefined转化成false)
    • 如果第1个操作数可以决定整体的值,那么就不会再运算第二个操作数
    • 如果第1个操作数就决定了整体的值,那么最终的结果就是第1个操作数的值
    • 如果第1个操作数不能决定整体的值,那么整体的值就是第2个操作数的值

2、运算符从操作数的个数分类:

一元:逻辑非、+“123”
二元:+、- 、* 、
三元:?:(表达式?结果A:结果B)

上一篇:第四周周一


下一篇:PO2386