本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
流程控制
运算符
赋值运算符
赋值运算符:对变量进行赋值
赋值运算符(=)将等号右边的值赋予给左边, 要求左边必须是一个容器
注意=在程序中不是相等的意思,是把等号右边的值赋值给左边边
赋值运算符还有:+=,-=,*=,/=,%=,使用这些运算符可以简化我们的代码
num += 1; //相当于 num = num +1;
num -= 1; //相当于 num = num -1;
num *= 1; //相当于 num = num *1;
num /= 1; //相当于 num = num /1;
num %= 1; //相当于 num = num %1;
一元运算符
一元运算符:正负号
前置自增: ++i,前置自减 --i
后置自增:i++ ,后置自减 i--
一元运算符相当于把自身加(减)1,前置先参与运算在进行自增(自减) ,后置先自增(自减)在进行运算
let i = 0;
console.log(i++ + i);
//结果 : 1 这里第一个 i++ 先参与运算是 0 ,然后自增1,所以变成了 0 + 1 = 1
let i = 0;
console.log(++i + i);
//结果 : 2 这里第一个++i先自增1是1 ,然后就是 1 + 1 = 2
//自减同理,不多赘述
比较运算符
应用场景:比较两个数据大小、是否相等
>: 左边是否大于右边
<: 左边是否小于右边
>=: 左边是否大于或等于右边
<=: 左边是否小于或等于右边
==: 左右两边值是否相等
===: 左右两边是否类型和值都相等(全等)
!==: 左右两边是否不全等(不全等)
!=: 不等
比较运算符返回值是boolean,正确为true,错误为false
= 单等是赋值 == 是判断 === 是全等
console.log(5 = '5') //==有隐式转换 在比较中会将 '5'转化为 5,所以它只能判断值,不能判断数据类型开发中判断是否相等,强烈推荐使用 ===
逻辑运算符
逻辑运算符用来解决多重条件判断
| 符号 | 名称 | 日常读法 | 特点 | 口诀 |
|---|---|---|---|---|
| && | 逻辑与 | 并且 | 符号两边都为true结果才为true | 一假则假 |
| || | 逻辑或 | 或者 | 符号两边有一个true就为true | 一真则真 |
| ! | 逻辑非 | 取反 | true变false false变true | 真变假,假变真 |
运算符优先级
一元运算符里面的逻辑非优先级很高
逻辑与比逻辑或优先级高
| 优先级 | 运算符 | 顺序 |
|---|---|---|
| 1 | 小括号 | () |
| 2 | 一元运算符 | ++ -- ! |
| 3 | 算术运算符 | 先* / % 后 + - |
| 4 | 关系运算符 | > >= < <= |
| 5 | 相等运算符 | == != === !== |
| 6 | 逻辑运算符 | 先 && 后 || |
| 7 | 赋值运算符 | = |
| 8 | 逗号运算符 | , |
语句
表达式和语句
表达式是可以被求值的代码,JavaScript 引擎会将其计算出一个结果
(简单来说就是有运算符的式子,比如 num += 1)
语句是一段可以执行的代码
(比如: prompt() 可以弹出一个输入框)
分支语句
从上往下依次执行就是顺序结构
根据条件选择执行代码,这种就叫分支结构
某段代码被重复执行,就叫循环结构
if分支
if语句有三种使用:单分支、双分支、多分支
单分支
/*语法:
if(条件){
满足条件执行的代码
} */
let num = 1;
if (num = 1){
console.log(num);
}
括号内的条件为true时,进入大括号里执行代码
小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型
双分支
/*语法:
if(条件){
满足条件执行的代码
}else{
不满足条件执行的代码
}*/
let num = 1;
if(num = 5){
console.log('num的值是5')
}else{
console.log(`num的值是${num}`)
}
多分支
/*语法:
if(条件1){
满足条件1执行的代码
}else if(条件2){
满足条件2执行的代码
}...
else{
不满足以上所有条件执行的代码
}*/
let num = 1;
if(num = 5){
console.log('num的值是5')
}else if(num = 4){
console.log('num的值是4')
}else
{
console.log(`num的值是${num}`)
}
三元运算符
语法:
条件 ? 满足条件执行代码1 : 不满足条件执行代码2
let num = 1;
num = 1? document.write('num的值是1'):document.write('num的值不是1');
switch语句
找到跟小括号里数据全等的case值,并执行里面对应的代码
若没有全等 === 的则执行default里的代码
注意事项:
- switch case语句一般用于等值判断,不适合于区间判断
- switch case一般需要配合break关键字使用 没有break会造成case穿透
/*
语法:
switch (表达式) {
case 值1:
代码1
break
case 值2:
代码2
break
case 值3:
代码3
break
default:
代码n
break
}
*/
let num = Number(prompt('请输入5以内的数字'));
switch(num){
case 1:
alert('你输入的值是1');
break;
case 2:
alert('你输入的值是2');
break;
case 3:
alert('你输入的值是3');
break;
case 4:
alert('你输入的值是4');
break;
default:
alert('你输入的值是5');
break;
}
case穿透:如果不加break的话,当前case执行完还会继续向下执行第二个case的代码(也可以利用这个特点实现一些效果,比如多个匹配值需要执行相同的代码 时,可以减少代码冗余,比如根据月份判断季节)
循环
循环作用:重复执行一些操作,如while循环 for循环.
while循环
/*语法:
while (循环条件) {
重复执行的代码(循环体)
}*/
let i = 0;
while (i<10){
console.log(i);
i++;
}
循环三要素:
1.变量起始值
2.终止条件(没有终止条件,循环会一直执行,造成死循环)
3.变量变化量(用自增或者自减)
for循环
/*语法:
for(初始化变量;终止条件;变量变化){
循环体(重复执行的代码)
}
}*/
for (let i = 1; i <= 10; i++) {
console.log('想吃芒果 ^_^');
}
//此时上述语句就打印了10句 '想吃芒果 ^_^'
初始化变量;终止条件;变量变化用分号; 隔开
for 循环嵌套
//也就是for循环里面嵌套for循环
//外层for循环执行1次,内部for循环执行多次
for (let i = 1; i <= 10; i++) {
console.log('想吃芒果 ^_^');
for(let j = 0;j<=5;j++){
console.log(j);
}
}
//此时上述语句输出了10个
/*
想吃芒果 ^_^
0
1
2
3
4
5
*/
循环退出
continue 结束本次循环,一般用于排除或者跳过某一个选项的时候, 可以使用continue
break 退出整个循环,一般用于结果已经得到, 后续的循环不需要的时候可以使用