选择结构
一、if...else、if...else if...else
按照某个条件执行某段代码:
在表示判断的情况下(布尔环境),下面表示真假情况:
**1、所有数字为真 ,0为假;**
**2、所有字符串为真,空字符串为假;**
**3、null 和 undefined 为假;**
**4、所有对象为真;**
**5、所有函数为真;**
var score = 70;
//单分支:
if(score>=60){
console.log('合格!')
}else{
console.log('不及格')
}
//多分支:
if(score>=80){
console.log('优秀!')
}else if(score>=60){
console.log('合格!')
}else{
console.log('还需继续努力!');
}
二、switch...case
/*
* 语法结构:
* switch(表达式){
* case 常量表达式 :语句;
* case 常量表达式 :语句;
* ...
* default : 语句;
* }
* 说明:
* 1、表达式一般是一个变量,该变量有具体的值,值可为字符串
* 2、default为默认执行,相当于else,可以省略
* 3、default位置任意
* 4、如果case语句后面没有break,会实现case穿透(从满足条件开始,语句依次执行)
* 5、switch表达式的值和常量表达式的值进行比较时,按照全等的方式进行比较,先比较类型,再比较值(case后面的值默认为int)
* 执行逻辑:用表达式的值和case后面的值作比较,如果相等,就执行对应的case语句
当条件是一个范围时,建议使用if
当条件有固定值时,建议使用switch
*/
var month = prompt("请输入一个月份:");
switch(month){
case "2" :{
var year = parseInt(prompt("请输入年份:"));
(year%4==0 && year%100!=0) || year%400==0 ? alert("这个月有29天!") : alert("这个月有28天!")
break;
}
case "1" :
case "3" :
case "5" :
case "7" :
case "8" :
case "10" :
case "12" :
alert("这个月有31天!");
break;
case "4" :
case "6" :
case "9" :
case "11" :
alert("这个月有30天!");
break;
}
循环结构
一、while
语法结构:
while(循环条件){
循环体;
}
执行逻辑:当循环条件为true时,执行循环体;当循环条件为false时,结束循环;
var i = 1;
while(i<=10){
console.log(i); //1,2,3,4,5,6,7,8,9,10
i++; //步长
}
二、do...while
语法结构
do{
循环体;
}while(循环条件);
/*
* while和do...while的区别:
* while:先判断表达式,后执行循环体,循环体可以一次也不执行
* do...while:先执行循环体,后判断表达式,循环体至少要执行一次
*/
var a = 1;
do {
console.log(a); //1,2,3,4,5,6,7,8,9,10
a++;
}while(a <= 10);
三、for
知道循环次数用for,不知道用while
for (var a = 0; a <= 5; a++){
console.log(a); //0,1,2,3,4,5
}
四、break、continue
- break:只能用于循环结构中,用于终止循环
- continue:只能用于循环结构中,用于跳过本次循环
for (var a = 0; a <= 5; a++){
console.log(a); //0,1,2,3
if (a >= 3)
break;
}
for (var a = 0; a <= 5; a++){
if (a === 3)
continue;
console.log(a); //0,1,2,4,5
}
循环对象/数组
一、for...in
用于循环对象的key
const arr = [1, 2, 3, 4];
for (let i in arr) {
console.log(i); //0,1,2,3
console.log(arr[i]); //1,2,3,4
}
const obj = {
name: 'aye',
age: 18
}
for (let i in obj) {
console.log(i); //name,age
console.log(obj[i]) //aye,18
}
二、for...of
- 用于循环对象的value
- 只限于实现了迭代器(iterable)的对象,所以
循环普通对象会报错
const arr = [1, 2, 3, 4];
for (let i of arr) {
console.log(i); //1,2,3,4
}
//es6为字符串增加了遍历器接口,使得字符串也可使用for…of遍历
var str = 'abcdef';
for (let i of str) {
console.log(i); //a,b,c,d,e,f
}
var obj = {
name: 'aye',
age:18
}
for(let i of obj){} //报错:obj is not iterable
//对于普通对象可以自己去实现其内部的迭代器,过于繁琐,此处先不做探讨,但可通过Object自带的方法实现对普通对象的key及value的循环:
for (let i of Object.keys(obj)) {
console.log(i) //name,age
}
for (let i of Object.values(obj)) {
console.log(i) //aye,18
}
三、with
- 用于临时拓展作用域链
- 严格模式下禁止使用,同时应该注意其带来的性能问题及可能造成的内存泄漏
//例1:
const person = {
info: {
name: 'aye',
age:18
}
}
with (person) {
let name = info.name;
let age = info.age;
console.log(name, age);
}
//例2:
const obj = {
a: 1,
b:2
}
with (obj) {
a = 4;
b = 5;
}
console.log(obj.a); //4
console.log(obj.b); //5