·操作符,也叫运算符operator,是js中发起运算最简单的方式。

·表达式(expression)的组成包含操作数和操作符,表达式会得到一个结果,然后用结果参与程序

算术运算符

·+-*/%()

·%:取余,取模。a /b=c余d,就说a %b = d。

·运算顺序:先算乘除取余、再算加减,有小括号先算小括号。

正常情况

数字与数字之间的运算。

非正常情况1

·有特殊值字面量参与的运算。

NaN参与的运算:得到的结果都是NaN.

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

·工作中并不会使用特殊值运算,没有实际应用的意义,但是要了解,以防面试遇到


非正常情况2

·其他类型的数据参与数学运算。

·有字符串参与的+运算:+号变为连字符将前后连接成整体字符串

·隐式转换:除了字符串参与的+运算,其他情况下,所有其他数据类型参与数学运算时,

计算机暗中将其他数据类型先自动转换成数字类型,再参与运算,这个过程中不需要使用parselInt()、Number()等方法,过程是暗中进行,这就是一个隐式转换的过程。

隐式转换

其他的数据类型会隐式转换为数字类型:

·对应数字:纯数字字符串会转为对应的数字”123”→123

·转换为1: true

·转换为0: false、null、””空字符串、空白字符串

·转换为NaN: undefined、非空非纯数字字符串

比较运算符

·也叫作关系运算符。一个比较运算符comparison operator 比较它的操作数

并返回一个布尔类型值。运算结果要么是true,要么是false。

大于 >

小于 <

大于等于 >=

小于等于 <=

== 相等,只判断值大小是否相等,不判断数据类型

!= 不等,与相等完全相反

=== 全等,不光判断值相等,还要判断数据类型相等

!== 不全等,与全等于完全相反

正常情况

·数字与数字比较。

非正常情况1

·特殊值参与比较运算。

· NaN参与:不等于和不全等于结果是true,其他的都得到false。

. Infinity参与的运算,视情况而定

操作符 - 图1

非正常情况2

·其他数据类型参与比较运算(排除字符串与字符串的比较)。

·其他数据类型也会隐式转换为数字参与比较。

“123”****123

true→1

false→0

null ****0

“”→0

undefined→NaN

“abc”→NaN

. null的判断比较特殊: **null 与0判断时,相等判断为false**,>=和<=判断为true

· null == undefined

非正常情况3

·字符串与字符串比较。

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

·字符编码顺序:从前往后0-9,A-Z,a-z,前面的小于后面的

·比较时,不关心两个字符串的长度,从第一个字符开始比较,

依次往后顺比较,直到比较出大小,就不再往后比较。

比较运算符运算顺序

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

· 3>2>1

逻辑运算符

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

&& 逻辑与运算符且

|| 逻辑或运算符逻辑

! 非运算符

正常情况

·布尔类型的值参与运算,返回值为布尔值。

非正常情况)

·除了布尔类型的值之外,其他数据类型的值也可以参与逻辑运算。

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

最终运算结果还是原来的某个位置的数据。

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

隐式转换为布尔值的规律

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

·转为true: 非0,NaN数字、非空字符串

·当它们用于非布尔值的时候,返回值就可能是非布尔值。其实这种运算非常简单,就两句话:

·(逻辑与a&&b )如果a能被转换为false,那么返回a;否则,返回b。

·(逻辑或a ||b )如果a能被转换为true,那么返回a;否则,返回b**。**

操作符 - 图2

逻辑运算符运算顺序

·同种运算符从前往后运算。

·综合运算顺序:非、与、或。

赋值运算符

·赋值运算符必须有变量参与运算,赋值运算符会做两件事情:

·第一,将变量中原始值参与对应数学运算,与右侧的数据。

·第二,将运算结果再重新赋值给变量。

·变量位于操作符的左侧。

赋值运算符符号

等于 =

加等于 +=

减等于 -=

*= 乘等于

/= 除等于

%= 取余等于

++ 递加

— 递减

一元运算符

·++和—也叫一元运算符,只有一个操作数。

·++或—符号可以写在变量前和变量后面,位置不同可能导致程序运行结果不同。

·以+为例:

·a++:++符号在变量之后,a++在参与程序过程中使用的原始没有加1的值,使用完后第二次用a变量时,a用的就是加1后的新值。先参与,后自加**。**

++a∶++符号在变量之前,++a在参与过程中整体就使用a加1之后的新值,使用完后第二次用a变量时,a用的也是加1的新值先自加,后参与**。**

操作符 - 图3

运算优先级

·运算优先级也可以叫综合运算顺序。·优先级从高到底

1.()优先级最高

2.一元运算符 ++ — !

3.算数运算符先*/%后+-

4.关系运算符>>= <<=

5.相等运算符== !==== !==

6.逻辑运算符先&&后|

7.赋值运算符**