目录
一、语句
简称流控制语句,控制代码的执行顺序
1. if语句
用于语句判断,操作数可以不是布尔值,操作过程中会默认调用Boolean()函数,结果为布尔值
格式:
if(条件表达式){
表达式成立时执行代码段
}
if(true==1){
console.log('你太棒了')
}
//输出"你太棒了"
2.if-else语句
1.双分支
语句的双分支选择
格式:
if(条件表达式){
表达式成立时执行
}else{
表达式不成立时执行
}
if(true==0){
console.log('你太棒了')
}else{
console.log('再接再厉')
}
//输出"再接再厉"
2.多重分支
语句的多重选择(注意:这种方法被switch语句取代)
格式:
if(条件1){
条件1成立时执行
}else if(条件2){
条件2成立时执行
}else if(条件3){
条件3成立时执行
}else{
条件不成立时执行
}
let num=3;
if(num==1){
console.log('太棒了')
}else if(num==2){
console.log('优秀')
}else if(num==3){
console.log('合格')
}else{
console.log('继续加油')
}
//输出"合格"
3.switch语句
语句多重选择。值得括号可以省略。break关键字会强制跳出switch语句,default关键字会在所有条件都不满足时返回
格式:
switch(条件表达式){
case(值1):条件表达式与值1匹配全等时,执行的代码段;break;
case(值2):条件表达式与值2匹配全等时,执行的代码段;break;
case(值3):条件表达式与值3匹配全等时,执行的代码段;break;
default:所有case匹配失败后默认执行的语句;
}
let num=3;
switch(num){
case(1):console.log('太棒了');break;
case(2):console.log('优秀');break;
case(3):console.log('合格');break;
default:console.log('再接再厉');
}
//输出"合格"
注意:为避免不必要的条件判断,最好给每条语句后面加上break。如果确实需要连续匹配多个条件,推荐写注释说明
switch(i){
case 25://跳过
case 26:console.log('25 or 26');break
case 45:console.log('45');break;
default:console.log('Other');
}
switch语句可以用于所有数据类型,而且条件的值不需要要时常量 ,也可以是变量或表达式
switch('helloworld'){ //如果这里有空格,那么下面一定也要有个空格
case "hello"+"world":console.log("Greeting was found");break;
case "Good Bay":console.log("Closing was found");break;
default:console.log("0");
}
//输出Greeting was found
let a=12;
switch(true){
case a<0:console.log(1);break;
case a>0:console.log(2);break;
default:console.log('a不存在')
}
//输出2
switch语句在比较每个条件的值时会采用全等操作符
let a=12;
switch(a){
case '12':console.log(1);break;
case 56:console.log(2);break;
default:console.log('找不到a对应的值')
}
//输出找不到a对应的值
4.do-while语句
特征:后测试循环语句,循环体内代码至少执行一遍
格式:
do{
循环体;
更新循环变量
}while(循环条件)
let a=1;
do{
a+=1;
console.log(a) ;
}while(a<10);
//输出2,3,4,5,6,7,8,9,10
5.while语句
先测试循环语句。
格式:
while(循环条件){
循环体;
更新循环变量;
}
let i=1;
while(i<4){
console.log(i);
i++;
}
//输出1,2,3
6.for语句
特征:先测试循环语句。无法通过while循环实现的逻辑也无法通过for循环实现
三个条件全部生虐可以创建一个无限循环,只包含循环条件实际上变成了while循环
格式:
for(定义循环变量;循环条件;更新循环变量){
循环体
}
for(let i=1;i<5;i++){
console.log(i);
}
//输出1,2,3,4
for(;;){//无穷循环
doSomething();
}
let i=1
for(;i<5;){
console.log(i);
}
//输出1,2,3,4
7.for-in语句
特征:迭代语句,无法保证返回对象属性的顺序。用于枚举对象中的非符号键属性。无法迭代null与undefined
用途:1.可以用于遍历数组的元素
2.可以用于遍历对象的所有属性数据。
格式:
for(const 变量 in 遍历目标){
迭代枚举;
}
for(const b in window){
console.log(b);
}
//输出window对象的所有属性
let a=[1,2,3,4,5,6];
for(const b in a){
console.log(b);
}
//输出0,1,2,3,4,5
8.for-of语句
特征:迭代语句,按照可迭代对象的next()方法产生值的顺序迭代元素,用于遍历可迭代对象的元素
格式:for(const 变量 of 可迭代对象){
遍历
}
let a=[1,2,3,4,5,6];
for(const b of a){
console.log(b);
}
//输出1,2,3,4,5,6
9.标签语句
给语句加标签
格式:
标签:语句
outermost:for(let a=1;a<5;a++){
console.log(a);
}
10.break和continue语句
break关键字会强制跳出循环体,continue会强制本次循环
for(let i=1;i<5;i++){
console.log(i);//返回1,2
if(i==3){
break;
}
}
//break与continue的区别
for(let i=1;i<5;i++){
if(i==3){
continue;
}
console.log(i);//1,2,4
}
1.与标签语句的配合使用
返回代码中特定的位置。
break与continue与标签语句组合使用能实现复杂的逻辑,但也容易出错,建议使用时嵌套不要太深
let num=0;
outermost:for(let i=0;i<10;i++){
for(let j=0;j<10;j++){
if(i==5&&j==5){
break outermost;
}
num++;
}
}
console.log(num);//55
//我们把标签语句删掉
let num=0;
for(let i=0;i<10;i++){
for(let j=0;j<10;j++){
if(i==5&&j==5){
break;
}
num++;
}
}
console.log(num);//95
在这个例子中,outermost标签标识的是第一个for语句,正常情况下,每个循环执行执行10次,num++会执行100次,但是break标签带来了一个变数,即要退出到标签,此时不仅退出了内部循环,还退出了外部循环,所以返回55,我们再把这个标签删除,单纯用一个break,此时可以看到这里只是结束了内部标签,直接跳到了循环i=6,这里有时候我们就可能产生思维误区,浅浅介绍一下
let num=0;
outermost:for(let i=0;i<10;i++){
for(let j=0;j<10;j++){
if(i==5&&j==5){
continue outermost ;
}
num++;
}
}
console.log(num);//95
//删除标签
let num=0;
for(let i=0;i<10;i++){
for(let j=0;j<10;j++){
if(i==5&&j==5){
continue ;
}
num++;
}
}
console.log(num);//99
我们再来看一下这个例子,第一个continue语句会强制循环继续执行,当执行到i=5,j=5时,直接跳过i=5,但是i=5这个循环已经执行了5次,所以最后的结果时95,我们再来看一下第二个,当我们删除标签语句后,continue只会跳过i=5,j=5这一次循环,继续执行下一次循环i=5,j=6,所以结果为99
11.with语句
将代码作用域设置为特定的对象,严格模式下不允许使用with语句
使用with语句的主要场所是针对一个对象的反复操作,听到这里可能会一头雾水,那么我们就拿我们常用的document写一个代码事例
//你还在这样写吗???
let a=document.getElementById('a');
let b=document.getElementById('b');
//大佬们都在这么写!!!
with(document){
let a=getElementById('a');
let b=getElementById('b')
}
2.函数
1.分类
ECMAScript使用function关键字声明,return会强制停止函数执行
格式:
匿名函数格式 : 传入参数:
//这是一个标准函数
function abc(){
let a=100;
console.log(a)
}
abc();//100
//这是一个匿名函数
(function(b){
console.log(b)
})(233)//233
注意:
1.只要碰到return语句,函数就会立即停止执行并退出,因此,return后面的所有代码都不会执行。
2.一个函数中可以有多个return。
3.return也可以不带返回值,用于提前终止函数执行
4.另外别忘了,没有返回值的函数实际上会返回特殊值undefined
2.严格模式下对函数的限制
1.不能使用eval和arguments作为函数名
2.函数的参数不能叫eval和arguments
3.两个参数不能是同一个名称
学海无涯,希望追求知识的小伙伴们每天都会收获新的知识,也希望我写的这些对大家都有所帮助啦