zoukankan      html  css  js  c++  java
  • module1-03-操作符

    操作符

    • 表达式:包含操作数操作符,表达式会得到一个结果

    一、算符运算符号

    1.1 基本介绍

    • +(加) -(减) *(乘) /(除) %(取余) ()(括号)

    • 顺序:先乘除取余、再加减,有小括号优先小括号

    1.2 非正常情况运算1

    • 即有特殊字面量参与的运算

    • NaN参与的运算

      • 得到的结果都是NaN

    • Infinity参与的运算结果视情况而定

      • 以另外一个Infinity抵消自己或者取余都会得到NaN,其它都是本身

      • 任何数 / Infinity都为0

      • 任何数 % Infinity都是其本身

    1.3 非正常情况运算2

    • 字符串参与的+运算:+号变为连字符将前后连接成整体字符串(数组无值或者只有一个值的时候进行运算会视为一个字符串

    • 隐式转换

      • 除了有字符串参与的+运算,其它情况下,会将其它数据类型自动转换为数字类型,再参与运算,这个过程中就不用自己添加parseInt(),Number()等方法

      • 纯字符串会转换为对应数字 “111” -> 111

      • 1:true

      • 0:false, null, "", " " -> 0

      • NaN:undefined、非空非纯数字字符串

    二、比较运算符

    • 也叫关系运算符,比较运算符比较它的操作数并返回一个布尔类型值

    2.1 非正常情况1

    • 特殊值参与比较运算(NaN与Infinity)

    • NaN参与:不等于和不全等于结果是true,其它得到的都是false,它跟自身也不相等或者全等

    • Infinity参与的运算视情况而定

      • 有等于或者全等的都对(包含大于等于之类)

      • 比任何数都要大-Infinity相反

    2.2 非正常情况2

    • 其它数据类型参与比较运算(排除字符串与字符串的比较)(null与undefined)

    • 其它数据类型会隐式转换为数字进行比较

      • “123” -> 123 true -> 1 false -> 0 null -> 0(并非真是0)undefined -> NaN "" -> 0 "abc" -> NaN

    • null会不一样,比如

      • null == 0 // false

      • null >= 0 // false

      • null <= 0 // false

      • 1 > null // true

      • null == null // true

      • null == undefined // true

      • 这里可以把null想象为无限趋近于0的数但是不等于0

    • undefined的话除了与null相等其它时间当成NaN来看待

      • undefined

    2.3 非正常情况3

    • 字符串与字符串比较

    • 不会发生隐式转换为数字,而是两个字符串的Unicode编码顺序

    • 从前往后0-9, A-Z, a-z, 前面的小于后面

    • 比如

      • '' == ' ' // false

      • '' == '0' // false

      • '6' < '12' // false

      • '1' < 'a' // true

      • 'a1' < 'a2' // true

    • 不关心两个字符串的长度,从第一个字符开始比较,一次往后顺延比较,直到比较出大小

    2.4 比较运算符运算顺序

    • 从前往后比较,前面的结果与后面的进行比较

    • 3 > 2 > 1 // false

    • 过程

      • true > 1 // false

      • 1 > 1 // false

    • 所以不能按照平时的数学习惯看待,还是要依照js的语法习惯进行判断

    三、逻辑运算符

    • 逻辑运算符常用于布尔类型值之间;当操作数都是布尔值时,返回值也是布尔值

    操作符描述
    && 逻辑与运算符 且 都真才真
    || 逻辑或运算符 有一真为真
    逻辑非运算符 结果只能是true或者false

    (1)非正常情况

    • 运算过程需要将操作数隐式转换为布尔类型的值,参与判断计算

    • 并不是所有的逻辑运算返回结果都是布尔值,其它数据参与得到的就是数据本身

    (2)隐式转换为布尔值的规律

    • 转换为false:NaN、0、”“、空字符串、null、undefined

    • 转换为true:非0非NaN数字、非空字符串

    • a && b

      • 如果a为true,返回值为b

      • 如果a为false,返回值为a

    • a || b

      • 如果a为true,返回值为a

      • 如果a为false,返回值为b

    (3)逻辑运算符运算顺序

    • 同样的运算符从前往后按顺序

    • 综合顺序:非(!)、与(&&)、或(||)

    四、赋值运算符

    • 赋值运算符必须有变量参与运算

    • 变量位于操作符的左侧

    赋值运算符符号

    符号描述
    = 等于
    += 加等于
    -= 减等于
    *= 乘等于
    /= 除等于
    %= 取余等于
    ++ 递加
    -- 递减

    五、一元运算符

    • 有 ++ -- !

    (1)++ --

    • 自身加1,自身减1

    • ++a与a++不一样,前者表达式还是a的值,而后者是a+1

    (2)!

    • 非运算符,返回一个布尔值

    • 可用 !! 来进行布尔转换

    (3)一些用法与注意事项

    • ++可以用在循环遍历的i++

    • var a = 10, b = 20, c = 30
      var num = a++ + ++b + c++ + ++a
      // 得73
      var b = 0, a = 0
      b = a++ + a++ + a++
      // 得3
      // 因为第一个a++中的a还是0, 但是这个表达式完了之后后面得a++中的是1, 进而最后面试2, 运算完之后b = 0 + 1 + 2, a = 3

    六、运算优先级

    • 运算优先级也可以叫综合运算顺序

    • 从高到低

      • ① ()优先级最高

      • ② 一元运算符 ++ -- !

      • ③ 算数运算符 先* / % 后 + -

      • ④ 关系运算符 > >= < <=

      • ⑤ 相等运算符 == != === !==

        • 也算作关系运算符

      • ⑥ 逻辑运算符 先&& 后||

      • ⑦ 赋值运算符

    • 案例

    // () -> 一元 -> 算数 -> 比较 -> 逻辑 -> 赋值
    var a = 4
    var num = 1 * (2 + 3) && ++a || 5 > 6 && 7 < 8 || !9
    // num = 1 * 5 && ++a || 5 > 6 && 7 < 8 || !9
    // num = 1 * 5 && 5 || 5 > 6 && 7 < 8 || false
    // num = 5 && 5 || 5 > 6 && 7 < 8 || false
    // num = 5 && 5 || false && true || false
    // num = 5 || false || false
    // num = 5

     

  • 相关阅读:
    进程和线程
    堡垒机初识--paramiko模块
    python三元运算
    python 遍历文件夹
    CentOs7安装rabbitmq
    logstash 中配置GeoIP解析地理信息
    Centos7单机部署ELK
    Nginx修改access.log日志时间格式
    nginx日志增加cookie信息
    socketserver多线程处理
  • 原文地址:https://www.cnblogs.com/lezaizhu/p/14088355.html
Copyright © 2011-2022 走看看