运算符和表达式
1. 运算符和表达式的概念
1.1 运算符
运算符就是参与运算的符号,像+
、-
、*
、/
等。
与运算符一起运算的变量、直接量称之为操作数。
1.2 表达式
1) 表达式是变量或者直接量与运算符组成的式子,表达式会有一个计算结果,称之为表达式的值,也就是说表达式是有值的。
2) 最简单的表达式是"原始表达式", 如 直接量、 变量名、 关键字等。
3) 复杂表达式由简单表达式组成, 运算符何以将简单表达式组合成复杂表达式。
4) 注意带有副作用的表达式,这样的表达式除了有表达式的计算结果之外,还会对表达式中的变量产生影响。
2. 运算符的分类
2.1 按照操作数个数
- 一元运算符
- 二元运算符
- 三元运算符
2.2 按照运算符功能
- 算数运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
3 运算符详解(按照功能)
3.1 算术运算符
运算符 | 运算符含义 | 操作数个数 | 组成的表达式的值的类型 | 组成的表达式有无副作用 |
---|---|---|---|---|
+ | 加法运算符 | 2 | number | 无 |
- | 加法运算符 | 2 | number | 无 |
* | 乘法运算符 | 2 | number | 无 |
/ | 除法运算符 | 2 | number | 无 |
% | 取余(取模)运算符 | 2 | number | 无 |
+ | 正号运算符 | 1 | number | 无 |
- | 负号运算符 | 1 | number | 无 |
++ | 递增运算符 | 1 | number | 有 |
-- | 递减运算符 | 1 | Number | 有 |
3.2 关系运算符
运算符 | 运算符含义 | 操作数个数 | 组成的表达式的值的类型 | 组成的表达式有无副作用 |
---|---|---|---|---|
== | 相等运算符 | 2 | boolean | 无 |
!= | 不等运算符 | 2 | boolean | 无 |
=== | 全等运算符 | 2 | boolean | 无 |
!== | 不全等运算符 | 2 | boolean | 无 |
< | 小于运算符 | 2 | boolean | 无 |
> | 大于运算符 | 2 | boolean | 无 |
<= | 小于或等于运算符 | 2 | boolean | 无 |
>= | 大于或等于运算符 | 2 | boolean | 无 |
in | 判断一个值是否属于某个数组或者一个属性是否属于一个对象 | 2 | boolean | 无 |
instanceof | 判断一个对象的实例是否属于某个对象 | 2 | boolean | 无 |
两个数据在使用关系运算符进行判等的时候,会发生自动类型转换,规则如下:
1)判等的时候(
==
):
- 先看两边是不是同种数据类型,如果是直接看是不是一样;如果不是那么两边都转数字
- 当遇到 null 的时候,会有特殊情况发生。
- 特殊情况:空串和null不相等
- 特殊情况:false和null不相等
- 特殊情况:0和null不相等
- 特殊情况:undefined 和 null 相等;
2)判断全等(
===
):(不会出现类型转换)
- 在判断全等的时候,必须类型和值都相同。
- 如果有一个不一样,就不全等;
3.3 逻辑运算符
运算符 | 运算符含义 | 操作数个数 | 组成的表达式的值的类型 | 组成的表达式有无副作用 |
---|---|---|---|---|
&& | 逻辑与运算符 | 2 | 会把其中一个操作数的值作为整个表达式的值 | 无 |
|| | 逻辑或运算符 | 2 | 会把其中一个操作数的值作为整个表达式的值 | 无 |
! | 逻辑非运算符 | 1 | boolean | 无 |
3.4 位运算符
运算符 | 运算符含义 | 操作数个数 | 组成的表达式的值的类型 | 组成的表达式有无副作用 |
---|---|---|---|---|
& | 按位与运算符 | 2 | interger | 无 |
| | 按位或运算符 | 2 | interger | 无 |
^ | 按位异或运算符 | 2 | interger | 无 |
~ | 按位非运算符 | 1 | interger | 无 |
<< | 按位左移运算符 | 1 | interger | 无 |
>> | 按位右移运算符 | 1 | interger | 无 |
>>> | 按位无符号右移运算符 | 1 | interger | 无 |
3.5 赋值运算符
运算符 | 运算符含义 | 操作数个数 | 组成的表达式的值的类型 | 组成的表达式有无副作用 |
---|---|---|---|---|
= | 赋值运算符 | 2 | 取决于右边的操作数 | 有 |
+= | 赋值求和运算符 | 2 | number | 有 |
-= | 赋值求差运算符 | 2 | number | 有 |
*= | 赋值求积运算符 | 2 | number | 有 |
/= | 赋值商运算符 | 2 | number | 有 |
%= | 赋值求余运算 | 2 | number | 有 |
&= | 赋值按位与运算符 | 2 | interger | 有 |
|= | 赋值按位或运算符 | 2 | interger | 有 |
^= | 赋值按位异或运算符 | 2 | interger | 有 |
<<= | 赋值左位移运算符 | 2 | interger | 有 |
>>= | 赋值右位移运算符 | 2 | interger | 有 |
>>>= | 赋值无符号右位移运算符 | 2 | interger | 有 |
+= | 赋值字符串连接运算符 | 2 | string | 有 |
3.6 其他运算符
运算符 | 运算符含义 | 操作数个数 | 组成的表达式的值的类型 | 组成的表达式有无副作用 |
---|---|---|---|---|
?: | 条件运算符(JavaScript 中唯一的三元运算符) | 3 | 取决于中间和后面的操作数 | 无 |
typeof | 判断操作数类型 | 1 | string | 无 |
+ | 字符串连接符 | 2 | string | 无 |
delete | 删除对象属性或者数组元素 | 1 | boolean | 有 |
, | 逗号运算符 | 2 | 取决于第二个操作数的值 | 无 |
4 运算符优先级
注意:
给表达式中的一部分添加
()
,可以提高此处的优先级。