前端零基礎 JS 教學 第二天 02 - day關係運算子與流程控制迴圈詳細講解 for switch 等

我想靜靜刁民發表於2019-02-09

第一天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以內的奇數的和
複製程式碼

斷點除錯:斷點除錯教程

前端零基礎 JS 教學 第二天 02 - day關係運算子與流程控制迴圈詳細講解 for switch 等

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;
    	}
補充:裡面少了一個很重要的功能 看看看你們能否找到並且補充上,是今天學的一個迴圈,只能告訴你們這個多了

程式碼除了敲理解外沒有別的辦法外物了加油! 複製程式碼

相關文章