5.运算符
5.1 算术运算符掌握点
-
任何非数值类型的数据在参与加法运算(这里指加减法)之前,都会被自动转换成数值类型,然后再参与运算。true转化为1,null转化为0,
-
任何数据与NaN进行加减运算,结果都是
NaN
-
任何数据与字符串相加,都会被先转换为字符串之后再运算,也就是字符串拼接;数据与字符串相减字符串‘数字’被直接转换为数字再运算,字符串‘字母’运算结果为
NaN
乘除法与减法规则相同
-
模运算 格式:
m%n = 余数
如果m>n,那么正常取余;m<n,那么结果是m;n是0,结果为NaN;且模运算的结果正负性,取决于m而不是n
5.2 赋值运算符s
1.= /= *= %= += -=
具有右结合性,等号左边只能为变量;
5.3 自增/减运算符
a++ ++a a-- --a
自增自减运算符最好不要出现在表达式中,也不能用在常量上
5.4 关系运算符
< > >= <= == != === !===
-
关系运算符返回值只有true和false
-
对于非数值类型数据,会先转换成数值类型再进行判断
-
任何数据与NaN比较都会返回false
-
如果参与比较的都是字符串类型,不会转换为主值类型,而是转换为Unicode编码
-
如果参与比较的有多个字符,会从左向右依次比较直到条件不满足为止
-
特殊比较结果
null == 0结果为false;``null == undefine结果为true;``NaN == NaN结果为false;
不可以通过==
来判断一个数据是否为NaN类型,使用isNaN()
函数
优先级和结合性
=== !==
会判断数值以及数据类型是否相等- 关系运算符“左结合”
< > >= <=
优先级大于== != === !===
5.5 逻辑运算符
-
逻辑与
&&
,返回值true和false -
逻辑或
||
,返回值true和false -
逻辑非
!
,返回值true和false优先级和结合性
-
左结合性,从左至右的运算
-
优先级
&&
>||
-
逻辑与运算中,如果参与运算的不是布尔类型,则先转换为布尔类型再参与运算;A&&B,如果A不成立则返回A,成立则返回B;
-
逻辑或运算中,如果参与运算的不是布尔类型,则先转换为布尔类型再参与运算;A&&B,如果A成立则返回A,不成立则返回B;
-
逻辑与存在逻辑短路现象,条件A不成立则表达式B不做运算
-
逻辑或存在逻辑短路现象,条件A成立则表达式B不做运算
5.6 逗号运算符
-
利用逗号运算符,同时定义多个变量;同时给多个变量赋值;
-
左结合性,一般用于简化代码
-
逗号运算符的结果就是最后一个表达式的结果
5.7 三目运算符
-
条件表达式?结果A:结果B
-
条件为真,返回A;条件为假,返回B
6.流程控制
顺序结构,选择结构,循环结构
6.1 选择结构if
- if的第一种形式
if(条件表达式){
条件满足执行的语句;
}
- if的第二种形式
if(条件表达式){
条件成立执行语句;
}else{
条件不成立执行语句;
}
- if第三种形式
```javascript
if(条件表达式A){
条件A满足执行语句;
}else if(条件表达式B){
条件B满足执行语句;
}......
else{
前面条件都不满足时执行此语句;
}
``
- 非布尔类型的数据,会先转换成布尔类型再判断;对于== 和 ===的判断,建议将常量写在前面;if/else if/else后面的大括号都可以省略,但是省略之后只有紧随其后的语句受到控制;在js中分好(;)也是一条语句,它是空语句;if选择结构可以嵌套使用;当if省略大括号时,else if/else会自动和距离最近没有被使用的if匹配;
6.2 选择结构switch
- switch格式
switch(表达式){
case 表达式A:
语句A;
break;
case 表达式B:
语句B;
break;
...
default:
前面所有的case都不匹配知性的代码;
break;
}
-
case判断是===,数值和类型都需要相等;()中可以是常量也可以是变量和表达式;case可以是常量变量表达式;break立即结束整个switch语句;default不一定写在最后,且可以省略;
-
对区间判断选择if,对固定值的判断选择switch,推荐使用if
6.3 循环结构 while
- 死循环;循环体是while大括号内的所有内容;
- 非布尔类型的的值,会转化为布尔类型再判断;while后如果只有一条语句可以省略大括号;不能在()后写分号
6.4 dowhile循环
- 格式
do{
需要重复执行的代码;
}while(条件表达式);
- 无论条件是否为真,循环体都会执行一次
6.5 变量作用域
-
js中定义变量,使用var和let(es6之后)
-
同一定义域内,var可以重复定义同名变量,后定义的变量覆盖先定义的变量,且var定义的变量可以先使用后定义,因为var有预解析操作
-
同一定义域内,let不可以重复定义同名变量,且不可以先使用后定义,没有预解析操作
-
let在块级作用域中定义变量,是局部变量
6.6 for循环
- for循环格式
for(初始化表达式;条件表达式;循环后增量表达式){
重复执行语句
};
-
for循环内的初始化表达式可以定义局部变量
-
for循环的()内容可为空,相当于while(1),但while玄幻不可省略
6.7 关键字
-
break关键字,可是用于switch语句和玄幻结构中,在switch语句中break关键字的作用是立即结束当前的switch语句,在循环结构中作用是立即结束循环
-
break后面的语句都会失效;break结束的是当前循环结构,即嵌套循环内break所在的那一环
-
continue关键字,只能用于循环结构,跳过本次循环进入下一次循环
-
continue关键字后的语句会失效;continue跳过的是当前循环结构