#if/for循环
流程控制
###比较运算符
> < >= <= == != === !==
- == 表示等于
- != 不等于
- === 全等于(除了判断值,还会判断数据类型,下同)
- !==不全等于
- 比较之后得到的结果都是boolean
if条件语句
当条件为真时,执行代码,条件为假时,不管
if (条件) {
console.log("条件为真");
}
两条分支
if (条件) {
console.log("条件为真");
} else {
console.log("条件为假");
}
多条分支
let a = 2;
if (a === 1) {
console.log("a 为 1");
} else if(a === 2){
console.log("a 为 2");
}else if(a === 3){
console.log("a 为 3");
}else {
console.log("a不是1,2,3");
}
if中的条件会强制转化为布尔值false的六个值:
switch
- 必须条件
- 分支判断采用===比较
- ===比较符前面的变量保持相同
-
它用于跳出switch()语句,来阻止代码自动地向下一个case执行break
-
关键词来规定匹配不存在时做的事情default
let today = 3;
switch (today) {
case 1://判断today是否全等于是1,是则执行对应的代码
console.log("今天是星期一");
break;//break用于阻止后续代码的执行
case 2:
console.log("今天是星期二");
break;
case 3:
console.log("今天是星期三");
break;
case 4:
console.log("今天是星期四") ;
break;
case 5:
console.log("今天是星期五");
break;
case 6:
console.log("今天是星期六");
break;
case 7:
console.log("今天是星期日");
break;
default:
break;
}
三目运算符
前提: if一定有且仅有两个分支 并且每一条分支 只有一条语句
let a = 5;
if(a !== 5){
console.log("a不等于5");
}else{
console.log("a等于5");
}
//三目运算符,在实际开发中,不建议使用
a!=5 ? console.log("a不等于5") : console.log("a等于5")
for循环
重复执行的代码(有些代码需要反复执行)—>for循环
//for(初始值;判断条件;步幅){code}
for (let i = 0; i < 5; i++) {
console.log(i); //打印从0到4
}
console.log("for循环结束时的i="+i);
//i结束的时候是多少?当i=9,判断为真,执行循环体
执行顺序
for( 1;2;3 ){
4
}
1->2->4->3->2->4->3->2
当判断条件为假的时候,跳出循环,真-->循环体,当我们步长增加后,进入判断语句,假--->跳出循环
声明的语句1只在开头执行一次,就没有了
不同的写法:
//一
let i=0;
for(;i<10;i++){
console.log(i);
}
//二:当循环体执行完,再执行步长,步长可以提到循环体的后面,当语句1和3在外面的时候记得两个分号不能省略,一个木头要变成三段,要砍两刀(分号)
let i=0;
for(;i<10;){
console.log(i);
i++
}
//实现函数执行10次
function fn(){
console.log("大家好")
}
for(let i=0;i<10;i++){
fn();
}
//要有三条语句,加两个分号
console.log("for循环结束时的i="+i);
for循环使用小例子
给button按钮添加事件,点击button,出现弹窗
//for循环,真正帮帮你注册/绑定事件,(它不负责帮你触发事件)没有帮你触发事件
let aBtn=document.getElementsByTagName("button");
for(let i=0;i<10;i++){
aBtn[i].index=i; //条件0 1
aBtn[i].i=i;
aBtn[i].onclick=function(){
alert("hi");
//需求:点击弹出弹窗,弹窗的内容是i在集合里面对应的序号
//实现不了需求,结束弹出8,点击事件执行时,for循环早就完了,结束之后再访问i,因为for循环执行完了,i就等于最后的那个值
alert(i); //8 ,一定直接不能使用i
alert(this.index); //0 1 2 3 4 5 6 7
}
console.log(i); //i=8
/*用来区分,对象和对象的序号之间不一样,点击不同的对象,函数对应的this是不一样的
给你不同的对象设置这么一个属性,不同的对象下面有一个名字相同的属性*/
}
/*要在事件里面,使用对象对应的的序号值,不要直接使用i,要使用自定义属性
要使用自身索引值时要使用自定义属性*/
continue 跳过本次循环
for (let i = 0; i < 5; i++) {
if (i == 3) {
continue;
}
console.log(i); //当i=3时,跳过此次循环,所以3没有被打印出来
}
break 跳出循环
for (let i = 0; i < 5; i++) {
if (i == 3) {
break;
}
console.log(i); //当i=3时,跳过循环,所以2后面的都没有打印
}
while,先判断再执行代码,决定当前是否循环
//性能跟之前的那个差不多
let aBtn=document.getElementsByTagName("button");
let i=0;
while(i<10){
aBtn[i].onclick=function(){
alert(1)
}
i++;
}
do while 先执行再判断,决定是否进行下一次循环
let i=0;
do{
console.log(i)
}while(false)
死循环
for(let i=0;true;i++){
alert(i);
}
for循环嵌套
//从外面往里面执行,遇到循环体(另一个for 循环)
for(let i=0;i<5;i++){
for(let j=0;j<6;j++){
console.log(1) //执行30次
}
}