代码块(只具有分组的作用)
代码块内部的内容在外部也是完全可见的
console.log("hello, world"); // 一个单独的语句
{
document.write("goodbye");
alert("FBI-warning");
} //大括号中的是一组语句,也叫代码块,要么都执行,要么都不执行
流程控制语句
控制程序执行的流程,使程序可以根据一定的条件来选择执行
(1)条件判断语句(if语句)- 可以在执行某个语句之前进行判断,条件成立才会执行语句,不成立则不执行
//语法一: if(条件判断句)语句
var a = 20;
if(a>10)
alert("a比10大");
//但是if语句只能管紧随其后的语句,如果要控制多条语句则需要写代码块
var a = 20;
if(a>10){
alert("a比10大");
alert("正确");
}
/*语法二:if(条件判断句{
语句...
}else {
语句...
}*/
/*语法三:if(条件判断句{
语句...
}else if {
语句...
}else{
语句...
} */
var age = 40;
if(age>=50 && age<100){
alert("身体健康");}else if(age<50){
alert("发财");}else {
alert("天天开心");}
练习
//prompt()可以弹出一个提示框,用户可以在框中输入内容,该函数需要一个字符串作为参数,该字符串会成为提示框的文字
var score = prompt("请输入小明的成绩:");
if(score==100){alert("奖励你一台宝马");
}else if(score>80 && score<=99){alert("奖励你一部手机");
}else if(score>60 && score<=80){alert("奖励你一本书");
}else {alert("啥也没有");
}
//将num1,num2,num3从小到大输出
var num1 = +prompt("请输入身高(cm):");
var num2 = +prompt("请输入财富(w):");
var num3 = +prompt("请输入颜值(px):");
// prompt()函数输入默认的是String,所以比较之前要先转换成Number
if(num1<num2 && num1<num3){
if(num2<num3){alert(num1+","+num2+","+num3);
}else{alert(num1+","+num3+","+num2);}
}else if(num2<num1 && num2<num3){
if(num1<num3){alert(num2+","+num1+","+num3);
}else{alert(num2+","+num3+","+num1);}
}else{
if(num1<num2){alert(num3+","+num1+","+num2);
}else{alert(num3+","+num2+","+num1);}
}
(2)条件分支语句(switch语句)— 判断switch后面的条件表达式和case后的表达式是否全等(如果数据类型不一样也是false)
/* 语法:switch(条件表达式){
case 表达式:
语句...
break;
case 表达式:
语句...
break;
default:
语句...
break;
}
*/
switch(num){
case 1:
alert("壹");
break;
//退出语句必须要有break,保证只执行当前语句,不然只要符合case条件会执行全部下面的语句
case 2:
alert("贰");
break;
default:
alert("非法数字");
break;
//如果所有的比较结果都是false,则直接执行default后的语句
}
练习
var score = +prompt("请输入成绩:");
switch(parseInt(score/10)){ // 保证score/10是一个整数,默认是浮点数
case 10:
case 9:
case 8:
case 7:
case 6:
/*如果case的执行结果都是一样,可以不用每条都写,因为只要符合上面的,不写break,就会自动执行到最下面*/
alert("合格");
break;
default:
alert("不合格");
beak;
}
switch(true){
case score>=60:
alert("合格");
break;
default:
alert("不合格");
break;
}
(3)循环语句—反复执行一段代码多次
1. while语句
/*语法:
while(条件表达式){
语句...
}
先判断再执行
*/
//先对条件表达式进行求值判断,如果是true则执行循环体,知道求值变为false结束循环
var i = 0; //1.创建初始化变量
while(i<10){ //2. 在循环中设置一个表达式
i++; //3.定义一个表达式,每次更新初始化变量
}
/* 语法:
do{
语句...} while(条件表达式)
先执行再判断,保证循环体至少执行一次
*/
var i =0;
do{
console.log(i++);}while(i<=10);
练习:
var money = 1000;
var year = 0;
while(money<5000){
money *= 1.05;
year++;
}
console.log("一共需要"+ year + "年");
while(true){
var score = +prompt("请输入小明的成绩:")
if(score>=0 && score<=100){
break;}
}
2. for循环
/* 语法:
for(初始化表达式;条件表达式;更新表达式){
语句...
}
*/
//求1-100的奇数之和
for(var i=0,sum= 0; i<=100; i++){
if(i%2 !=0){ //筛选奇数
sum= sum+i;}
}
console.log(sum);
//1-100中7的倍数的个数和总和
for(var i=1, var sum=0, var count=0;i<=100; i++){
if(i%7==0){
sum += i;
count++}
}
console.log(sum+ count);
//水仙花数
for(var i=100;i<1000;i++){
var bai = parseInt(i/100);
var shi = parseInt((i-bai*100)/10);
var ge = i%10;
if(bai*bai*bai+shi*shi*shi+ge*ge*ge==i){
console.log(i);
}
}
//判断用户输入的数字是否是质数
var num = +prompt("请输入一个大于一的数字:");
var flag = true;
if (num <= 1) {
alert("请输入合法数字"); //保证数据的合法性
} else {
for (var i = 2; i < num; i++) {
//如果可以整除则一定不是质数
if (num % i == 0) { flag = false; }
}
}
if (flag) {
alert("这是质数");
} else {
alert("这不是质数");
}
for循环的嵌套
//在用户页面输出图形
//控制高度
for(var i=0;i<5;i++){
//控制宽度
for(var a=0;a<i+1;a++){
document.write("*");
//外部循环执行一次,内部循环执行五次
}
document.write("</br>");
}
//倒着的三角形
for(var i = 0; i<5; i++){
for(var j = 0; j > j-i; j++){
document.write("*");
}
document.write("</br>");
}
//打印99乘法表
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
document.write(j + "*" + i + "=" + (i * j) + " ");
}
document.write("</br>");
}
//打印1-100中所有的质数
for (var i = 2; i <= 100; i++) {
var flag = true; //注意flag的位置,写true是默认是质数
for (var j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
}
}
if (flag) {
document.write(i + "</br>");
}
}
(4)break & continue
break关键字可以退出switch和循环语句,但是不可以用于if
for(var i=0;i<5;i++){
console.log(i);
if(i==2){
break;}
}//只返回1和2
//这里的break虽然是写在if里,但是是对for循环起作用
//break关键字只会立即终止离他最近的循环
for(i=0;i<5;i++){
console.log("@外层循环");
for(j=0;j<5;j++){
break; //不会影响外部循环
console.log("内层循环");
}
}
//循环可以起名字,break就可以结束指定循环
outer: //循环的名字
for(i=0;i<5;i++){
console.log("@外层循环");
for(j=0;j<5;j++){
break outer; //指定结束外部循环
console.log("内层循环");
}
}
continue关键字可以跳过当次循环
for(i=0;i<5;i++){
if(i==2){
continue;} //一旦执行continue则不会再执行console,而是返回上面for循环去判断
console.log(i);
}
//continue也是默认跳过离得最近的循环,但是也可以像break一样通过起名字跳过指定循环
//优化质数
//添加计时器检测性能 1.添加break
console.time("test");//开启计时器,test是计时器的名字
for (var i = 2; i <= 100; i++) {
var flag = true;
for (var j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
break; //一旦发现可以整除没有余数的直接跳出该循环来提高性能
}
}
if (flag) {
document.write(i + "</br>");
}
}
console.timeEnd("test"); //停止计时,停止哪个就写哪个名字
//继续优化 2.缩小取值范围
for (var i = 2; i <= 100; i++) {
var flag = true;
for (var j = 2; j <= Math.sqrt(i); j++) { /*j只需要小于根号i即可,因为在根号i之前的数字都已经是j的因数了,使用Math.sqrt();函数进行开方*/
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
document.write(i + "</br>");
}
}