条件分支语句
三元表达式
三元表达式是js中唯一一个需要三个元素参与的表达式。
语法: 条件表达式 ? 值1 : 值2;
计算机会自行计算条件表达式的真假,返回值是布尔值如果结果是true,整个式子结果是值1;
如果表达式结果是false,整个式子结果是值2.
三元表达式使用的情况:当值是二选一时,使用三元会更简单。
任何三元表达式都可以改为if语句(if语句是最基础的条件表达式)
举例:
if(false) {
console.log(1);
}else {
console.log(0);
}
当工作年限不满1年,工资小于8000,年终奖为工资的1倍,否则是1.2倍;
当工作年限不满2年,工资小于10000,年终奖为工资的1.5倍,否则是1.7倍;
当工作年限为超过2年,工资小于13000,年终奖为工资的2.3倍,否则是3倍;
用户输入年限,工资,输出年终奖
举例:
/*
当工作年限不满1年,工资小于8000,年终奖为工资的1倍,否则是1.2倍;
当工作年限不满2年,工资小于10000,年终奖为工资的1.5倍,否则是1.7倍;
当工作年限为超过2年,工资小于13000,年终奖为工资的2.3倍,否则是3倍;
用户输入年限,工资,输出年终奖
*/
// 的到用户年限
var year = parseInt(prompt("请输入年限")) || 0;
// 的到用户工资
var salary = parseInt(prompt("请入工资")) || 2000;
// 声明倍数
var beishu = 0;
// 计算倍数
if(year === 0) {
// 当工作年限不满1年,工资小于8000,年终奖为工资的1倍,否则是1.2倍;
beishu = (salary < 8000) ? 1 : 1.2;
}else if(year === 1) {
// 当工作年限不满2年,工资小于10000,年终奖为工资的1.5倍,否则是1.7倍;
if(salary >= 10000) {
beishu = 1.7;
}else {
beishu = 1.5;
}
}else {
// 以上情况都不满足才执行该语句
// 工资小于13000,年终奖为工资的2.3倍,否则是3倍;
beishu = (salary < 13000) ? 2.3 : 3;
}
// 输出年终奖
console.log("年终奖是" + beishu * salary);
switch语句
开头语句,允许程序去计算一个表示式的值,然后让这个值去匹配case标签。匹配成功执行该case标签的执行体
语法:
switch(表达式) {
case 值1:
执行体1;
break;
case 值2:
执行体;
break;
……
default:
以上情况都不满足执行的语句;
break;//default语句中的break可有可无;
}
举例:
// 用户输入一个星座,弹出对应的星座
var xingzuo = prompt("请输入你的星座");
switch(xingzuo) {
case "白羊座":
alert("第一星座");
alert("白羊座");
break;
case "巨蟹座":
alert("巨蟹座");
break;
case "水瓶座":
alert("水平座");
break;
default: //default类似else ,以上情况都不满足执行的语句
alert("没有你输入的星座");
alert("换一下");
// default语句中可以书写break或者省略,都会结束switch语句
// break;
}
alert("结束");
break作用:在switch语句中,表示满足case匹配情况时 ,不再往下执行其他的case ,跳出switch语句。
有时可以利用break语句:
用户输入月份,我们弹出对应的天数
比如2月,弹出28天
1,3,5,7,8,10,12 弹出31天
其他30天
var month = parseInt(prompt("请输入月份"));
// 利用break书写switch语句
switch(month) {
// 2月,弹出28天
case 2:
console.log("该月有28天");
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
console.log("该月有31天");
break;
default:
console.log("该月有30天");
}
31天case语句能不能书写成
case 1 || 3 || 5 || 7 || 8 || 10 || 12:
计算机遇见表达式都是先计算。结果是case 1:
switch语句特殊写法,可以在switch后面的小括号中书写true,在case中书写表达式结果是true匹配switch执行后面的语句。
// 用户输入分数,弹出对应的等级
// 的到用户分数
var score = parseInt(prompt("请输入分数"));
// 弹出对应的等级
switch(true) {
case score < 60:
console.log("不及格");
break;
case score <= 70:
console.log("继续努力");
break;
case score <= 80:
console.log("良好");
break;
default:
console.log("非常不错");
}
console.log("多敲代码");
条件分支语句:
if语句最基础使用最广泛的条件分支语句
三元表达式:当值是二选一时使用
switch: 有多种可能值时使用
循环语句
循环语句:重复执行一段代码,执行遇见某个指令(条件为假),结束循环语句
for循环,do while, while, for in语句
for循环语句
for循环是前测试循环语句:先判断条件是否满足,当满足条件时,才执行循环语句。直到条件为假结束循环语句。
for语句比较灵活。
for(循环变量初始值; 条件表达式 ; 步长){
循环语句;
}
原理:for循环判断条件表达式,当条件表达式为真时执行循环语句,直到条件为假时跳出循环。结束循环后再执行for循环后面的语句。
第一次执行:
先执行且只执行一次语句1,然后进行条件的判断语句2,如果满足循环条件,向内执行循环语句3,然后执行语句4变量的改变;如果不满足条件,结束for循环,执行for循环后面的其他js语句;
第二次执行:如果能执行语句4,继续执行语句2,判断判断条件表达式是否满足,如果满足循环条件,向内执行循环语句3,然后执行语句4变量的改变;如果不满足条件,结束for循环,执行for循环后面的其他js语句;
……
当条件为真时,重复执行语句2,语句3,语句4.直到条件为假时,执行后面的其他js语句。(只要想执行循环语句3必须先判断2是满足条件)
可以直接根据for原理的到结果。
for(var i = 3; i < 13; i +=3 ) {
console.log(i);
}
console.log("结束");
/*
第一次执行:i=3,i<13真,才执行循环语句,输出3
第二次执行:i=6,i<13真,执行循环语句,输出6
第三次执行:i=9,i<13真,执行循环语句,输出9
第四次执行:i=12,i<13真,执行循环语句,输出12
第五次执行:i=15,i<13假,当循环条件为假,才结束for循环
for循环结束才执行后面的其他js语句
输出“结束”
*/
for循环中的变量称为循环变量,可以是任意的名字,一般我们习惯书写i,j,k
循环变量是全局变量。可以在任何地方书写,可以书写在for循环外面或者里面。
// 2循环变量是全局变量,循环语句有可能一次都不执行
var i = 3;
for(console.log(++ i); i < 1 ; i ++) {
console.log(i);
}
/*
第一次执行:i= 3,语句1只会执行一次输出4,i<1假,结束for循环
*/
语句2可以书写为任何条件表达式,只要可以判断真假就可以。
// 语句2可以书写成任意形式
for(var i = 4; i != 10; i += 3) {
console.log(i);
}
/*
第一次执行:i=4, i!=10真,执行循环语句输出4
第二次执行:i=7, i!=10真,执行循环语句输出7
第三次执行:i=10, i!=10假,立即结束循环
*/
循环语句可能会一直循环,这种是死循环。
// 当循环条件为真,循环语句会一直执行
for(var i = 1; i >= 0 ; i ++) {
console.log(i);
}
for(var i = 3; i < 10 ; i += 3) {
console.log(i);
}
console.log(i);
/*
第一次执行:i=3,i<10真进入循环语句输出3
第二次执行:i=6,i<10真进入循环语句输出6
第三次执行:i=9,i<10真进入循环语句输出9
第四次执行:i=12,i<10假,立即结束循环语句
执行后面的其他js语句
console.log(i)12
*/
for循环里面的循环语句也可以书写为if语句,if结构体想执行必须同时满足for循环条件和if语句的条件。
for(var i = 4; i < 25 ; i +=4) {
// 当i<25,同时i能被5整除才输出i
if(i % 5 == 0) {
console.log(i);
}
}
console.log(i);
/*
第一次执行:i=4,i<25真,进入循环语句if判断i%5==0假结束if语句3;
第二次执行:i=8,i<25真,进入循环语句if判断i%5==0假结束if语句3;
第三次执行:i=12,i<25真,进入循环语句if判断i%5==0假结束if语句3;
第四次执行:i=16,i<25真,进入循环语句if判断i%5==0假结束if语句3;
第五次执行:i=20,i<25真,进入循环语句if判断i%5==0真执行if语句输出20;
第六次执行:i=24,i<25真,进入循环语句if判断i%5==0假结束if语句
第七次执行:i=28,i<25假,结束for循环语句
执行后面的其他js语句输出i=28
*/
for循环嵌套for循环,一层一层去执行,每一层for循环变量不同。
for(var i = 1 ; i < 4; i ++) {
for(var j = 1; j < 4 ; j ++) {
console.log(i,j);
}
}
console.log(i,j);
/*
第一次:i=1,i<4真,进入循环语句j=1,j<4真,(1,1),j++
j=2,j<4真,(1,2),j++
j=3,j<4真,(1,3),j++
j=4,j<4假结束j循环
第*次:i=2,i<4真,进入循环语句,j=1,j<4真(2,1)j++
j=2,j<4真,(2,2),j++
j=3,j<4真,(2,3),j++
j=4,j<4假结束j循环
第*次:i=3,i<4真,进入循环语句,j=1,j<4真(3,1)j++
j=2,j<4真,(3,2),j++
j=3,j<4真,(3,3),j++
j=4,j<4假结束j循环
第*次:i=4,i<4假,结束i循环。执行后面的其他js语句
输出(i=4,j=4)
*/
穷举思想
概念:我们经常想得到一组数据,有一些特定的要求,计算机没法自己帮我们输出这些数据。我们人为的需要编写一段程序,让计算机去帮我们实现程序。将所有的可能情况,一一的列举出来,然后我们人为限定判断条件,把符合条件的数据就给它输出,不满足的就跳过,继续验证下一个数据是否满足条件,直到把所有可能情况都验证一个遍。这个方法就叫做全举法,也叫穷举法。
外层:一一列举,for循环。
内层:进行判断,if语句。
案例1:在控制台输出一个数的所有约数。
约数概念:a %b ==0,那么a叫做b的倍数,b叫做a的约数或者因数。
一个数的约数,最小是1,最大是它本身。
// 用户输入一个正数,输出这个数所有的约数
// 比如用户输入12 约数1,2,3,4,6,12
// 的到用户输入
var num = parseInt(prompt("请输入数字"));
// 输出约数
// 约数范围区间1-数字本身,将这些可能性一一列举
for(var i = 1; i <= num; i ++) {
// 只输出约数
// 整除
if(num % i == 0) {
// 这个i才是约数,输出
console.log(i);
}
}