运算符
运算符也称为操作符
通过运算符可以对一个或多个值进行运算或操作
1.算数运算符
+
对两个值进行加法运算并返回结果-
对两个值进行减法运算并返回结果*
对两个值进行乘法运算并返回结果/
对两个值进行除法运算并返回结果%
对两个值进行取余运算并返回结果
注意:
- 除了加法以外,对
非Number
类型的值进行运算时,都会先转换为Number
然后在做运算。 - 而做加法运算时,如果是两个
String
进行相加,则会做拼串操作,将两个字符连接为一个字符串。 - 任何值和
String
做加法,都会先转换为字符串,然后再拼串。
2.一元运算符
一元运算符只需要一个操作数
+
正号,不会对值产生任何影响,但是可以将一个非数字转换为数字-
负号,可以对一个数字进行符号位取反++
自增,可以使变量在原值的基础上自增1前++
(++a):++a的值是变量的新值(自增后的值)后++
(a++):a++的值是变量的原值(自增前的值)
--
自减,可以使变量在原值的基础上自减1前--
(–a):–a的值是变量的新值(自减后的值)后--
(a–):a–的值是变量的原值(自减前的值)
3.逻辑运算符
!
非
运算可以对一个布尔值进行取反,true
变false
,false
变true
- 当对非布尔值使用
!
时,会先将其转换为布尔值然后再取反 - 我们可以利用两个
!
来将其他的数据类型转换为布尔值
- 当对非布尔值使用
&&
可以对符号两侧的值进行与
运算- 只有两端的值都为
true
时,才会返回true
。只要有一个false
就会返回false
- 与是一个短路的与,如果第一个值是
false
,则不再检查第二个值 - 对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
- 如果第一个值为
false
,则返回第一个值 - 如果第一个值为
true
,则返回第二个值
- 如果第一个值为
- 只有两端的值都为
||
可以对符号两侧的值进行或
运算- 只有两端都是
false
时,才会返回false
。只要有一个true
,就会返回true
- 或是短路的或,如果第一个值是
true
,则不再检查第二个值 - 对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
- 如果第一个值为
true
,则返回第一个值 - 如果第一个值为
false
,则返回第二个值
- 如果第一个值为
- 只有两端都是
4.赋值运算符
=
可以将符号右侧的值赋值给左侧变量+=
a+=5相当于a=a+5-=
*=
/=
%=
和+=
类似
5.关系运算符
>
>=
<
<=
- 关系运算符用来比较两个值之间的大小关系的
- 关系运算符的规则和数学中一致,如果关系成立则返回
true
,关系不成立则返回false
- 如果比较的两个值是非数值,会将其转换为Number`然后再比较
- 如果比较的两个值都是
String
,此时会比较字符串的Unicode编码,而不会转换为Number
6.相等运算符
==
相等,判断左右两个值是否相等,如果相等返回true
,如果不等返回false
- 对不同的类型进行比较,会将其转换为相同的类型然后再比较,转换后相等它也会返回
true
,null == undifined
- 对不同的类型进行比较,会将其转换为相同的类型然后再比较,转换后相等它也会返回
!=
不等,判断左右两个值是否不等,如果不等则返回true
,如果相等则返回false
- 不等也会做自动的类型转换
===
全等,判断左右两个值是否全等,它和相等类似,只不过它不会进行自动的类型转换,如果两个值的类型不同,则直接返回false
!==
不全等,和不等类似,但是它不会进行自动的类型转换,如果两个值的类型不同,它会直接返回true
注意:
- 由于
undefined
衍生自null
,所以null == undefined
会返回true
,但是null === undefined
会返回false
NaN
不与任何值相等,包括它自身,NaN == NaN
会返回false
- 判断一个值是否是
NaN
,使用isNaN()
函数
7.三元运算符
…?…:…
语法:条件表达式?
语句1:
语句2- 执行流程:
- 先对条件表达式求值判断
- 如果判断结果为
true
,则执行语句1,并返回执行结果 - 如果判断结果为
false
,则执行语句2,并返回执行结果