前端零基础 JS 教学 第二天 02 - day关系运算符与流程控制循环详细讲解 for switch 等...

第一天js复习:

复习:
	1、js简介  
		答案:运行在客户端的语言 就是运行在浏览器中的脚本语言,逐行解释,编译语言有编译的过程
		答案:发明人:布兰登·艾克
	2、js运行原理
		答案:js引擎也叫js解释器,转换成二进制,html靠的是排版引擎
	3、js有三部分组成
		答案:ECMAscript 做出了语法规范数据类型   BOM浏览器对象模型  DOM文档对象模型   很重要
	4、js书写的三个位置
		答案:行内  内部内嵌,外部 和css相同 
	5、变量是什么
		答案:变量就是一个盒子存储数据的,实际上是存放在内存区域中
	6、变量的声明以及存储
		答案:var 变量的声明 使用var num  =10; 声明变量且赋值,叫变量初始化
	7、变量的命名规范
		答案:不可以使用数字,可以使用$ 字母下划线 ,使用骆驼命名法
	8、简单数据类型有哪些
		答案:number boolean  String  null nudefined
	9、常见的转义字符
		答案:外双内单使用引号的时候  转义字符使用\ , 换行\n ,空格\b  tab\t
	10、检测数据类型
		答案: typeof  typeof null //object
	11、数据类型转换、
		答案:number  string  boolean
			number 类型: Number()数值类型 parseFloat()取浮点 parseInt()取整函数
			string 三个 toString()  num.toString()进制转换  String()转换为字符串, + 号转换
			boolean :Boolean(1)  !! 1  boolean两种转换方式

	12、一元运算符,++前置 和 ++ 后置
		答案:一元运算符 !num  num++  ++num 自己进行参与运算的是一元
		    :a + b 两个人进行运算是 二元运算符
复制代码

小测试: var num = 1; console.log(num++ + 10 + num++);

num++ 是1 + 10 = 11;但是发生变化num++先值运算在自加1 所以变成2所以变成了 11 + 2 = 13 整体是 1 + 10 + 2 = 13
复制代码

正课今天讲:

1、运算符下

2、流程控制上 分支结构

3、流程控制下 循环结构

学习目标

  学习目标 
	 	掌握关系运算符,逻辑运算符,赋值运算符以及运算符优先级
	 	if...else 和 switch 分支语句
	 	while/do  while/for 三种循环
	 	break 和 continue 循环跳出语句
	 	双重循环
	应用
	  能编写一个乘法口诀表
复制代码

正课1、 关系运算符 (比较运算符)

概念:关系运算符,两个数据进行比较的运算符,会返回布尔值(true/false)作为比较运算符
	运算符名称      说明		案例        结果		
	 <	     小于号             1 < 2       true
	 >	     大于号             2 > 1       true
	 >=	    大于等于            2 >= 2      true
	 <=	    小于等于            3 <= 2      false
	 ==	 等号(会转类型)         2 ==2       true
	 !=	     不等号             3 != 2      true
	 !==      不全等            2 !== '2'       true
	 ====	  全等要求值和数据类型一致  2 === '2' false
	 
总结:
符号		作用		用法
=           赋值                 把右边给左边
==          判断                 判断两边值是否相等
===         全等                 判断两边值和数据类型是否相等
复制代码

正课2、 逻辑运算符

概念:逻辑运算符,用来进行两个布尔值运算的,运算符,返回值也是布尔值

逻辑运算符		说明			案例
&&                   逻辑与简称 与  并且的意思    num1 && num2
||                   逻辑或简称 或               num1 || num2
!                   逻辑非简称 非               !num1 

解答:与 或 非

逻辑与 &&: 两边都是true 才返为true   否则返回false
逻辑或 ||: 两边都为false 才返为false 否则都为true 只要有一个为真即为true
逻辑非  !: 也叫做取反符号,用来取一个布尔值相反的值,如true 的相反是false,false的相反是true

demo: && 并且与
    var  res = 2 > 1 && 3 < 5; //需要两边同时为真
    console.log(res)  //true 
    
    var res = 2 > 1 && 3 < 1 // 两边只有有一个为假false 即为false
    console.log(res) //false

demo: || 或
    var res = 2 > 1 || 3 < 5;//只要一个为真 即为true
    console.log(res)//true
    
    var res = 2 > 4 || 5 < 4; //只要同时不为真 即为false 
    console.log(res) //false;
    
demo: ! 非 取反
    var res = !true;
    console.log(res); //false

    var res = !false;
    console.log(res); //true
  
    var res = !19; 
    console.log(res); //false
    
    var res = !0; //零是false 所有才有非零即真的这一说,所以零取反是true 
    console.log(res) //true 
    
    var res = !''; //字符里面只有''是空所有取反是true
    console.log(res) //true
    
    
测试:
	var  num1 = 7;
	var  str = '你好我爱你js';

	var res1 = num1 > 5 && str.length >= num1;   //true
	var res2 = num1 < 5 && str.length >= num1;  //false
	var res3 = !(num1 < 10);    //false
	var res4 = !(num1 < 10 && str.length == num1); //false
复制代码

赋值运算符

var age =  10; //把10赋值给变量 age 

赋值运算符   说明		案例 
=		   直接赋值	 var usrName = '我是值';
+= 、-=	 加减一个数后在赋值  var age = 10 age += 5 //15 age = age+5
*=、/=、%= 乘、除、取模后再赋值  var age  = 2; age *=5 //10 age = age*5
复制代码

运算符的优先级

1、() 优先级最高
2、一元运算符++ -- !
3、算数运算符 先 * / % 后 + - 
4、关系运算符 > >= < <=
5、相等运算符 ==  != === !==
6、逻辑运算符先&& 后||
7、赋值运算符
规律 :
先一元后二元
先算数后关系
逻辑运算符中 !非权重最高  其实是&&  最后||

练习题:
4 >= 6 || '人' !='外星人' && !(12*2 == 333) && true 
答案:4>=6 false ||
答案:人!='外星人' true &&
答案:!(12*2 == 333) false 取反变成true &&
答案:true 
答案:最后为true 因为 先判断&& 最后是|| 有真为true 真

var num = 10;
5 == num / 2 && (2 + 2* num).toString() === '22';
答案是true
答案:5 == num / 2 等于5  true 
答案:(2 + 2* num).toString() === '22'; 22转换成字符串类型 恒等于 22 字符类型 所以为true 


var a = 3 > 5 && 2 < 7 && 3 == 4;
console.log(a); //false 

var b = 3 <= 4 || 3 > 1 || 3 !=2 ;
console.log(b); //true

var c = 2 === '2';
console.log(c);//false 

var d = !c || b && a;
console.log(d); //true
复制代码

流程控制 上 分支结构 重点

表达式
	表达式由运算符构成,并且产生结果的语法结构
	每个表达式都会产生一个值,他可以放在任何需要一个值的地方
	
语句
	语句可以理解为一个行为循环语句和判断语句就是典型的语句
	一个程序有很多个语句组成,一般情况下;分号分割一个一个语句
复制代码

重点 概念:流程控制分、 顺序结构,分支结构,循环结构三种,代表三种代码执行的顺序

顺序结构:

概念:由上至下的执行代码就是顺序结构

var userAge = prompt('请输入您的年龄');
var userName = prompt('请输入您的姓名');
alert('欢迎您' + userName + '年龄' + username)
复制代码

分支结构

概念:由上到下执行代码过程中,根据不同的条件,执行不同的代码
共有两种分支结构 if...else 和 switch

if...else.. 语句
if是如果

//条件成立执行代码,否则什么也不做
if(条件表达式){
    //如果条件成立执行的代码语句
}

案例:
//如果年龄满18 就可以进入网吧需要一个判
思路 :
1、用户输入年龄
2、判断是否满足18
3、满足可以去网吧
4、不满足怎么办

var userAge = Number(prompt('您的年龄大于18岁可以上网'));
if(userAge >= 18){
	alert('您今年' + userAge + '岁可以上网了');
}
alert('您今年' + userAge + '岁现在要好好学习');



重点:if...else
    如果...否则
    只会选择一个进行执行
    
if(条件表达式){
	如果条件成立执行的代码
}else{
	否则执行的代码
}
    
思路:
1、接收用户输入的姓名
2、来判断是否中奖
3、如果有则返回恭喜中奖
4、否则返回没有中奖

//判断一个人是中奖根据名字查询如果查询到了中奖,否则不中奖
var userName = prompt('请输入名字')
if(userName == '张三'){
	alert('恭喜你中奖了');
}else{
	alert('你没有中奖');
}

案例:

//能整除4且不能整除100的为闰年(2004年就是闰年,1901年不是闰年);
//能够被400 整除的就是润年
思路:
1、输入年份
2、进行闰年判断
3、打印出是否属于闰年,是闰年输出啥,不是输出啥

// % == 0  

var year = Number(prompt('请输入年份'));
if(year % 4 == 0 && year % 100 !== 0 || year % 400 == 0){
	alert(year + '是闰年');
}else{
	alert(year + '不是闰年');
}


重点:if...else..if 语法

//适合于检查多重条件
if(条件1表达式){
	//如果条件1成立执行的代码
}else if(条件2表达式){
	//否则 如果 条件2成立执行的代码
	注释:条件1不成立但是条件2成立
}else if(条件3表达式){
	//否则 如果条件3成立执行的代码
	注释:条件1、2不成立但是条件3成立
}else{
	//上述条件都不成立执行的代码
}

案例:
要求接受用户输入的分数,根据不同的分数输入出等级字符A,B,C,D,E
1、90分含以上输出A
2、80分含~90分不含输出B;
3、70分含~80分不含输出C;
4、60分含~70分不含输出D;
5、60分不含输出E;

思路:
1、输入接受用户输入的值
2、进行if..else..if 的判断
3、弹出输入数字应得的分数

var num = Number(prompt('请输入分数'));

if(num >= 90){
	alert('1您的得分是' + num + '恭喜您');
}else if(num >= 80){
	alert('2您的得分是' + num + '恭喜您');
}else if(num >=70){
	alert('3您的得分是' + num + '恭喜您');
}else if(num >=60){
	alert('4您的得分是' + num + '恭喜您');
}else{
	alert('5您的分数是' + num + '得到E')
}
复制代码

总结: if...else 小结

根据条件不同,有选择地执行,分支结构结束后,会继续执行后续的代码
复制代码

三元表达式 ? :

语法 : 表达式1 ? 表达式 2: 表达式3
如果表达式1 为真执行返回表达式2的值 表达式为假返回表达式3的值
三元表达式就if...else 的简洁的写法

var num = 3 > 5 ? 3 : 5;  
console.log(num); // 5
console.log(3 > 5 ? 3 +1 : 5 + 1); //6
上面这样写也是可以的因为是返回他们的值
	
if(3 > 5){
	console.log(3);
}else{
	console.log(5);
}
复制代码

switch case 结构

当要针对变量多种不通知执行不同的代码,就可以使用switch

switch 开关的意思 转换 case 案例

语法:使用结构表达式的值各个case 中的值进行相等比较

switch(变量){
		case : value:
		//表达式结果等于value 1时 要执行的代码
		break;
		case  : value:
		//表达式结果等于value 2时 要执行的代码
		break;
		default:
		//表达式结构不等于任何一个value 时要执行的代码
	}
	
使用switch 小案例:

var num = prompt('请输入喜爱的水果');
switch(num){
	case '苹果':
		alert('您喜欢吃' + num);
	break; //一定要添加break 不然会有穿透效果
	case '香蕉':
		alert('您喜欢吃' + num);
	break;
	case '草莓':
		alert('您喜欢吃' + num);
	break;
	default:  //默认的上面都找不到
		alert('没有你爱吃的' + num);
	break;
}

执行顺序
1、先从变量中获取一个值随后表达式的值会与结构中的每个case 值做比较
2、如果存在匹配全等=== 即变量值 === value 值 则与该case关联的代码块会被执行,
并且在遇到break 时停止,整个switch 代码执行结束
3、如果所有的case的值都和表达之不匹配则执行default里的代码
4、我们case后面的值通常都是一个常量
细节:breack是跳出switch 的作用
注意变量的字符类型
复制代码

switch 与 if 对比

switch...case通常处理case为常量的情况,而if...else更加灵活有范围
当只有分支比较少的时候if效率比switch高
switch进行一次条件判断后直接执行到程序的条件语句而if..else有几种条件,就得判断多少次
分支比较多是switch的效率比较高,而且结构更清晰
复制代码

循环结构

循环:围着操场重复的跑圈就是循环

js中的循环:一段代码重复的执行
三种循环结构: while  do...while  for 三个关键: 计数器 判断条件 计数器自增
重点学:for 循环 存在即合理
复制代码

while 循环

//条件表达式为true 时重复执行循环体代码

//条件表达式为false退出循环

while(条件表达式){
	//循环体代码
}

执行顺序:
先执行条件表达式
如果为false 则退出循环
如果为true 则执行循环体代码,紧接着执行循环条件表达式,要是一直执行true 就会变成死循环

案例: 

var num = 1;
while( num <= 10){
	
	/*console.log('您好');
	num++; 这里是自增条件 
	*/
	console.log('您好'+ num++); //我这里吧自增条件放到打印的控制器里面

	// console.log('hi~你好么么哒') 千万不要这么写会造成死循环
}

解答:1、
var age = 1;

while (age <= 18) {
	console.log('哎呀每年都增加了'+ age +'岁啊')
	age ++;
}

解答: while 循环 需要一个循环条件 age  < 18 然后输出循环体 然后需要循环条件 到多少

案例:1、
 用户输入一个年龄打印年龄
  var userAge = prompt('年龄');
  var age = 1;
 while(age <= userAge){
	console.log('这个人多少'+age+'岁了');
    age ++;
     
 }

  案例:2、
    计算1~100之间所有数的和 
    思路:
	1、需要2个变量 一个自增,还需要一个保存结果值的
	
	var i = 1; //自增
	var sum = 0; //保存结果的盒子
	while(i <= 100){
		sum =  sum + i;
		//也可以简写 sun+=i;
		i++;
	}
// 解答:代码从上面执行,i=1,1<=100执行下面sum 这句话 sum等于0  加1 赋值给sum 所以 sum 等于1 然后i++
复制代码

while 总结

while 语句就是当条件满足时重复执行相同的代码
无论是循环结构还是分支结构,在执行完毕后,都会执行后续代码;
在循环体内部,需要修改有循环条件否则会造成死循环 重点是死循环造成了很不友好
复制代码

我是:我想静静 看大家的反馈说少练习所以给大家一些练习题目,思路自己想,需要我解答的留言给我会在留言中解答:

练习题:
1、打印100以内的奇数
2、打印100以内的奇数的和
复制代码

断点调试:断点调试教程

do...while 循环

语法:
do{
	//do是做
	//循环体代码,条件表达式为true 时重复执行循环体代码 
	//do...while 至少做一次
}while(条件表达式)

//计数器  计数器自增   判断条件
//var  i = 1;  //计数器

 // 计数器 计数器自增 判断条件
   var i = 1; //计数器
   do{  //1、do首先打印出 要好好理解js 然后 执行
   	 console.log('要好好理解js'+i);
   	 i++; //2、然后i++ 2 <= 5然后继续回到do 里面继续打印
   } while(i <= 5)

重点:区别do...while 与 while 至少do..while 至少会执行一次为什么这么说呢请看案例
    var  i= 1;
  do{
  	console.log('学习时候要专注'+ i);
  	// 这时候你就会发现 i>=5不满足判断条件但是也是会执行一次
  	// 再次真香警告 很重要 判断三个条件  1、计数器 2、计数器自增 3、判断条件
  	i++;
  } while(i >= 5);
 
案例:
    使用do...while循环:输出你喜欢我吗?(y/n):直到输出了y退出否则继续询问
    思路:
     1、用户输入 (y/n
     2、判断是y退出循环不是一直循环使用do...while

do{
	var user = prompt('你喜欢我吗?你的答案是y与n');
	// 只要用户输入的不是y就一直循环 要是满足条件就退出循环
} while( user !== 'y');
alert('我也喜欢你呢');
复制代码

do...while小结

do...while循环和while循环非常像,二者经常可以相互替代,但do...while的特点是不管条件是否成立都执行一次
do...while语句就会先执行一遍,后面才根据条件是否满足决定执行次数
和while循环一样,在循环内部,需要修改循环条件,否则会造成死循环

do{
 	// do先写 一个花括号 然后 while 然后是括号
 }	while()
复制代码

for循环

//for循环一般用来根据次数循环 
for(初始化,条件表达式,自增表达式){
	循环体
}

for(  1、 var i=0;  2、 i< 10;  4、 i++){
             3、
	console.log( i );
}
这里标注了1、2、3、4、看执行顺序

for(var i = 1; i <= 10; i++){
	console.log(i);
	// 记住初始化 var i =1;在for 里面只会执行一次
	// 先判断在执行 i< =10 执行 console.log(i); 然后在执行i++;
	//可以通过断点进行查看执行顺序
}
执行顺序 
	1、初始化
	2、条件表达式 ->3循环体 ->4自增表达式
	之后一直执行234 知道条件表达式为false才结束循环

案例:
    求1~100之间所有偶数的和
    console.log(undefined+ 10) //打印出NaN 不是一个数字
    // 不可以var sum;这样声明 因为会输出 undefined 
    
	var sum = 0;
	for(var i=0 ; i <= 100; i++){
		if( i % 2 ==0){
			sum+=i;
			// sum = sum + i; 以后我尽量使用简写方式
		}
	}
	console.log(sum);

案例:
 求输出一个人1到100岁
 
 for(var i=1; i <= 100; i++){
	if(i == 1){
		console.log('这个人' + i + '岁出生了');
	}else if(i == 100){
		console.log('这个人' + i + '他死了');
	}else{
		console.log('这个人' + i + '岁了')
	}
}
复制代码

双重for循环 重点

双重for 循环
	for(外循环的初始化,外循环的条件,外循环的增量){
		for(内循环的初始化,内循环的条件,内循环的增量){
				需要执行的代码
		}
	}

重点:双重for循环外面负责行 一行两行的行 外面执行一次里面执行相应的次数
	
for(var i = 1; i <= 3; i++){
	// 外层 i = 1的时候执行一次 里面for执行三次 所有 一共执行了 9次
	for(var j =1; j <=3; j++){
		console.log('你好');
	}
}

案例:
	使用for 循环打印三个星星
	
var str = ''; //空字符串
// 外层for 负责可以打印3行高 
for(var i=1; i<=3; i++){
	//str +='?'; //简写
	// str = str + '?';
	// 里面的for 负责的是 一行打印3个星星
	for(var j=1; j<=3;j++){
		str += '?';
	}
	str +='\n';
}
console.log(str);

案例:
    使用for 循环打印倒三角
    	var str = '';
	for(var i=1; i<=9;i++){
		for(var j=1; j<= 10 - i; j++){
			str+='?';
		}
		str+='\n';
	}
	console.log(str);
	// 解答: 外层for 循环负责第一行里面的行 ,里面的for 负责一行里面有几个星星
    
    
    //第二种算法
    var str = '';
    for(var i=1; i<=9; i++){
    	for(var j=i; j<=9;j++){
    		str+='?';
    	}
    	str +='\n';
    }
    console.log(str);
// 解答: 从行数开始 i= 1;打印出9个,2打印出8个,3打印出7个,所以把内层for循环j从i开始计算 
    j的启始值从行数开始到9就是打印的个数
// 解答:外层for 循环负责行数 里面for循环执行若干次
   
案例:
    使用for 循环打印99乘法表
var str = '';
// 外层for 负责可以打印 i 行数
for(var i=1; i<=9;i++){
	// 里面的for 负责的是 一行 j 一行内的个数 
	for(var j=1; j<=i; j++){
		// 首先i等于1 j = 1  1<=1吗? 等于 输出 ,第二次输出
		1<=2?小于输出然后j++然后j<=2小于等于 输出 
		str +='?';
		
	总结: 我的个数永远比行数小 ,谁管行数i 谁管理个数呢j 所以 j永远小于i
	}
	str +='\n';
}
console.log(str);

打印99乘法表
var str = '';
for(var i=1; i<=9; i++){
	for(var j=1; j<=i; j++){
		// str +='?';
		// 1 * 1 = 1;
		str+= j + '*' + i + '=' + j*i + '\t';
		//这里不要忘记str+=
	}
	str +='\n';
}
console.log(str);
// 解答:我们的一行的个数永远比行数小 最核心语句 var j=1; j <= i; j++
复制代码

练习题: 计算1-100之间能被三整除的数的和 使用for 循环

continue 与break 的区别

continue 跳出本次循环
 概念:立即跳出本次循环继续下一次循环,比如吃苹果一共五个 吃到第三个苹果发现有虫子扔掉继续吃这是continue直到吃完五个苹果为止
 案例:
for(var i=1; i<=5;i++){
	if( i== 2){
		console.log('哎呀苹果里面有虫子不能吃了'+ i +'扔掉了');
		continue;
	}
	console.log('我继续吃苹果'+i)
}
复制代码

break 退出整个循环

概念:理解跳出整个循环开始执行循环后面的代码,比如吃苹果一共五个 吃到第三个苹果发现有虫子后面的都不吃了这就是break

for(var i=1; i<=5;i++){
	if( i== 2){
		console.log('哎呀苹果里面有虫子不能吃了'+ i +'扔掉了');
		break;
	}
	console.log('我继续吃苹果'+i)
}
break 是退出整个for循环 跟switch 是相同的 
复制代码

练习:

简易ATM机器 思路:里面现存有100块钱 如果存钱就用加现在有的钱 如果取钱就取现有的钱 查勘余额就显示余额 退出就退出循环

版本v1.

        var num = 100;
    	var resut =  Number(prompt('1、存钱\n2、取钱\n3、显示余额\n4、退出'))
    	switch (resut) {
    		case 1:
    			var num1 = Number(prompt('请输入您要存入的金额'));
    			num += num1;
    			alert('您存入的金额是' + num);
    			break;
    		case 2:
    			var num2 = Number(prompt('请您输入您要取出的金额'));
    			num -=num2;
    			alert('您取出的金额是' + num);
    			break;
    		case 3:
    			alert('您现在的余额是' + num);
    			break;
    		case 4:
    			break;
    		default:
    			 alert('您输入的有误请重新输入');
    			break;
    	}
补充:里面少了一个很重要的功能 看看看你们能否找到并且补充上,是今天学的一个循环,只能告诉你们这个多了

代码除了敲理解外没有别的办法外物了加油! 复制代码

转载于:https://juejin.im/post/5c5bfe3a6fb9a04a027ace81

你可能感兴趣的:(前端零基础 JS 教学 第二天 02 - day关系运算符与流程控制循环详细讲解 for switch 等...)