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

 

原文地址:https://www.cnblogs.com/lezaizhu/p/14088355.html