03.运算符

运算符

  • 运算符也叫操作符
  • 通过运算符可以对一个活多个值进行运算,并获取运算结果
    • 比如Ltypeof就是运算符,可以获得一个值的类型。他会将该值的类型以字符串的形式返回

算数运算符

​ ( 当对非Number的类型进行运算时,会将这些值转换为Number进行运算,
​ 任何值和NaN做运算都是NaN )

  • +:加法

    • 可以对两个值进行假发运算,并将结果返回。
    • 两个字符串相加,相当于一个拼串操作
    • 任何值和字符串相加,都会转换为字符串,然后再拼串
      • 我们可以利用这一特点,来将一个任意的数据类型转换为String,我们只需为任意的数据类型+一个" "即可将其转换为String,这是一种隐式的类型转换
  • -:减法

  • *:乘法

  • /:除法

    • 任何值做 - * / 运算时,都会自动转换为Number,我们可以利用这一点做隐式的类型转换,可以通过为一个值-0 *1 /1 将其转换为Number
  • %:取余

一元运算符

  • 一元运算符只需要一个操作数

  • +正号

    • 正号不会对数字进行影响
  • -负号

    • 负号可以对数字进行取反
  • 对于非Number值,会先转换为Number值再进行运算,可以对一个其他的数据类型使用+,来将其转换为number,也是一种隐式转换

    //结果为6,将字符串2,转换成了数字2
    var a = 1 + +"2" + 3;
    

自增

  • 通过自增可以使变量再自身的基础上增加1

  • 对一个变量自增以后,原变量值会立即自增1

    • 自增分成两种,后++(a++)和前++(++a)
      • 不论使a++还是++a,都会立即是原变量的值自增1
      • a++ 是先运算再自增
      • ++a是先自增再运算
    a++;
    ++a;
    

自减

  • 通过自减可以使变量再自身的基础上减少1

  • 对一个变量自减以后,原变量值会立即减1

    • 自减分成两种,后--(a--)和前--(--a)
      • 不论使a--还是--a,都会立即是原变量的值自减1
      • a++ 是先运算再自减
      • ++a是先自减再运算
    a++;
    ++a;
    

逻辑运算符

    • 非运算可以对一个布尔值进行取反,true变false,false变true
    • 当对非布尔值使用!时,会先将其转换为布尔值再取反
    • 我们可以利用!来将其他的数据类型转换为布尔值
  • &&
    • &&可以对符号两侧的值进行运算
    • 只有两端的值都为true时,才会返回true,只要有一个false就会返回false
    • 与是一个短路的与,如果第一个值是false,则不再检查第二个值
    • 对于非布尔值,他会将其转换为布尔值然后再做运算,并返回原值
    • 规则:
      • 如果第一个值为false,则返回第一个值
      • 如果第一个值为true,则返回第二个值
  • ||
    • ||可以对符号两侧的值进行或运算
    • 只有两端都是false时,才会返回false,只要有一个true就会返回true
    • 或是一个短路的或,如果第一个值是true,则不再检查第二个值
    • 对于非布尔值,会将其转换为布尔值然后再做运算并返回原值
    • 规则:
      • 如果第一个值为true,则返回第一个值
      • 如果第一个值为false,则返回第二个值

赋值运算符

  • =
    • 可以将符号右侧的值赋值给左侧变量
  • +=
    • a += 5 相当于 a = a+5
  • -=
    • a -= 5 相当于 a = a-5
  • *=
    • a = 5 相当于 a = a5
  • /=
    • a /= 5 相当于 a = a/5
  • %=
    • a %= 5 相当于 a = a%5

关系运算符

  • 关系运算符用来比较两个值之间的大小关系的
  • 关系运算符的规则和数学中一致,用来比较两个值之间的关系
    • 如果关系成立则返回true,关系不成立则返回false
  • 如果比较的两个值是非数值,会将其转换为Number然后再比较
  • 如果比较两个值都是字符串,此时会比较字符串的Unicode编码,而不会转换为Number

相等运算符

  • ==
    • 相等,判断左右两个值是否相等,如果相等返回true,不等返回false
    • 相等会自动对两个值进行类型转换,如果对不同的类型进行比较,会将其转换为相同类型然后再比较,转换后相等他也会返回true
  • !=
    • 不等,判断左右两个值是否不等,如果不等则返回true,如果相等则返回false
    • 不等也会做自动的类型转换
  • ===
    • 全等,判断左右两个值是否全等,他和相等类型,只不过他不会进行自动的类型转换,如果两个值的类型不同,则直接返回false
  • !==
    • 不全等,和不等类似,但是他不会进行自动的类型转换,如结果两个值的类型不同,他会直接返回true
  • 特殊的值
    • null和undefined
      • 由于undefined衍生自null,所以null == undefined 会返回true,但是null === undefined 会返回false
    • NaN
      • NaN不与任何值相等,包括它自身 NaN == NaN //false
    • 判断一个值是否为NaN
      • 使用isNaN()函数

三元运算符

  • ?
    • 语法:条件表达式?语句1:语句2;
    • 执行流程:
      • 先对表达式求值判断
        • 如果判断结果为true,则执行语句1,并返回执行结果
        • 如果判断结果为false,则执行语句2,并返回执行结果

优先级

- 和数学中一样,JS中的运算符也是具有优先级的,比如先乘除后加减,先与后或
- 优先级不需要记忆,如果不确定,使用()改变优先级
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。