JavaScript合集(流程控制語句)
阿新 • • 發佈:2022-11-30
流程控制
- 條件判斷語句
- 條件分支語句
- 迴圈語句
條件判斷語句
if語句
語法:
if(條件表示式){
語句
}
-------
if(a > 10){
alert('a比10大')
}
if-else語句
語法: if(條件表示式){ 語句... } else { 語句... } ------------------- let age = 10 if(age > 18){ alert("今年成年了") }else{ alert("沒有成年") }
if-else-if
語法: if(條件表示式){ 語句... } else if(條件表示式){ 語句... } ----- 會自上向下依次對if後的表示式進行判斷,如果表示式條件為true,就執行當前的語句, 如果為false,就繼續向下執行, 如果都不滿足,就執行最後的else之後的語句 -------------------- if(age >= 100){ alert('你真是一個長壽的人!') }else if(age >= 80){ alert('你比樓上那位還年輕不小!') }else if(age >= 60 ){ alert('你已經退休了!') }else if(age >= 30){ alert('你已經步入中年了!') }else if(age >= 18){ alert('你已經成年了!') }else{ alert('你還未成年!') }
小練習:
- 練習1: 編寫一個程式,獲取一個使用者輸入的整數。然後通過程式顯示這個數是奇數還是偶數。 ------------------------ //它會將使用者輸入的內容以字串的形式返回,可以通過變數來接收 let num = +prompt("請輸入一個整數:") if (isNaN(num) || num % 1 !== 0) { alert("你的輸入有問題,請輸入整數!") } else { if (num % 2) { alert(num + "這個數是奇數") } else { alert(num + "這個數是偶數") } }
- 練習2:
從鍵盤輸入小明的期末成績:
當成績為100時,'獎勵一輛BMW'
當成績為[80-99]時,'獎勵一臺iphone'
當成績為[60-79]時,'獎勵一本參考書'
其他時,什麼獎勵也沒有
----------------
let score = +prompt("請輸入您的期末成績:")
if (isNaN(score) || score < 0 || score > 100) {
alert('請輸入一個合法的分數')
} else {
if (score === 100) {
alert('獎勵一輛BMW')
} else if (score >= 80 && score <= 99) {
alert('獎勵一臺iphone')
} else if (score >= 60 && score <= 79) {
alert('獎勵一本參考書')
} else {
alert('什麼獎勵也沒有')
}
}
- 練習3:
大家都知道,男大當婚,女大當嫁。那麼女方家長要嫁女兒,當然要提出一定的條件:
高:180cm以上; 富:1000萬以上; 帥:500以上;
如果這三個條件同時滿足,則:'我一定要嫁給他'
如果三個條件有為真的情況,則:'嫁吧,比上不足,比下有餘。'
如果三個條件都不滿足,則:'不嫁!'
-----------------
let height = +prompt('請輸入你的身高(釐米):')
let money = +prompt('請輸入你的身價(萬):')
let face = +prompt('請輸入你的顏值(畫素):')
if(height>180 && money>1000 && face>500){
alert('我一定要嫁給他!')
}else if(height>180 || money>1000 || face>500){
alert('嫁吧,比上不足,比下有餘。')
}else{
alert('不嫁!')
}
switch語句
- 語法:
switch(表示式){
case 表示式:
程式碼...
break
case 表示式:
程式碼...
break
case 表示式:
程式碼...
break
case 表示式:
程式碼...
break
default:
程式碼...
break
}
也就是說:
執行的流程
- switch語句在執行時,會依次將switch後的表示式和case後的表示式進行全等比較
- 如果比較結果為true,則自當前case處開始執行程式碼
- 如果比較結果為false,則繼續比較其他case後的表示式,直到找到true為止
- 如果所有的比較都是false,則執行default後的語句-
- 注意:
- 當比較結果為true時,會從當前case處開始執行程式碼- 也就是說case是程式碼執行的起始位置
- 這就意味著只要是當前case後的程式碼,都會執行
- 可以使用break來避免執行其他的case-
- 總結- switch語句和if語句的功能是重複,switch能做的事if也能做,反之亦然。
- 它們最大的不同在於,switch在多個全等判斷時,結構比較清晰
while迴圈
語句:
while(條件表示式){
語句....
}
-----------------
三個條件要點:
1.初始化表示式(初始化變數)
2.條件表示式(設定迴圈條件)
3.更新表示式(修改初始化變數)
---------
let i = 0
while(i<5){
alert('666')
i++
}
----------------
小練習:
假設銀行存款的年利率為5%,問1000快存多少年可以變成5000塊
let year = 0
let money = 1000
while(money < 5000){
money *= 1.05 // 迴圈沒執行一次,就相當於錢存了一年
year++
}
console.log(`需要存${year}年,最終的錢數為${money}元!`)
執行流程:
while語句在執行時,會先對錶達式進行判斷,
如果結果為true,則執行迴圈體,執行完畢,繼續判斷,
如果為true,則再次執行迴圈體,執行完畢,繼續判斷,如此重複
直到條件表示式結果為false時,迴圈結束
do-while語句
do-while迴圈
- 語法:
do{
語句...
}while(條件表示式)
- 執行順序:
do-while語句在執行時,會先執行do後的迴圈體,
執行完畢後,會對while後的條件表示式進行判斷
如果為false,則迴圈終止
如果為true,則繼續執行迴圈體,以此類推
和while的區別:
while語句是先判斷再執行
do-while語句是先執行再判斷
實質的區別:
do-while語句可以確保迴圈至少執行一次
for語句
for迴圈
- for迴圈和while沒有本質區別,都是用來反覆執行程式碼
- 不同點就是語法結構,for迴圈更加清晰
- 語法:
for(①初始化表示式; ②條件表示式; ④更新表示式){
③語句...
}
- 執行流程:
① 執行初始化表示式,初始化變數
② 執行條件表示式,判斷迴圈是否執行(true執行,false終止)
③ 判斷結果為true,則執行迴圈體
④ 執行更新表示式,對初始化變數進行修改
⑤ 重複②,知道判斷為false為止
- 初始化表示式,在迴圈的整個的生命週期中只會執行1次
- for迴圈中的三個表示式都可以省略
- 使用let在for迴圈的()中宣告的變數是區域性變數,只能在for迴圈內部訪問
使用var在for迴圈的()中宣告的變數可以在for迴圈的外部訪問
- 建立死迴圈的方式:
while(1){}
for(;;){}
----------------------
for(let i = 0; i < 5; i++){
console.log(i)
}
小練習
練習1:
求100以內所有3的倍數(求他們的個數和總和)
let count = 0
let sum = 0
for (let i = 1; i <= 100; i++) {
if (i % 3 === 0) {
count++
sum += i
}
}
console.log(`他們的個數是${count},總和是${sum}`)
----------------------------------
練習2:
求 1000 以內的水仙花數(1-1000)
- 水仙花數
- 一個n位數(n >= 3),如果它各個位上數字的n次冪之和還等於這個數,那麼這個數就是一個水仙花數
- 153 --> 1 5 3 --> 1 125 27 --> 153
法1:
let count = 0
for (let i = 100; i < 1000; i++) {
//1. 先得到1000以內得所有數字
// 2.得到數字得個位,十位,百位得數字,進行運算
// 獲取個位的
let oneNum = i % 10
// 獲取十位的
let twoNum = parseInt(i / 10 % 10)
// 獲取百位的
let threeNum = parseInt(i / 100)
console.log()
let allSum = oneNum ** 3 + twoNum ** 3 + threeNum ** 3
if (allSum === i) {
console.log("水仙花數" + i)
count++
}
}
console.log('水仙花的個數是:' + count)
法2:
for(let i=100; i<1000; i++){
let strI = i + ""
if(strI[0] ** 3 + strI[1] ** 3 + strI[2] ** 3 === i){
console.log(i)
}
}
---------------------------------------
練習3:
獲取使用者輸入的大於1的整數(暫時不考慮輸錯的情況)
然後編寫程式碼檢查這個數字是否是質數,並列印結果
質數
- 一個數如果只能被1和它本身整除,那麼這個數就是質數
- 1既不是質數也不是合數
// 獲取使用者輸入的數值
let num = +prompt("請輸入一個大於1的整數:")
// 用來記錄num的狀態,預設為true,num是質數
let flag = true
for(let i=2; i<num; i++){
if(num % i === 0){
// 如果num能被i整除,說明num一定不是質數
// 當迴圈執行時,如果從來沒有進入過判斷(判斷程式碼沒有執行),則說明9是質數
// 如果判斷哪怕只執行了一次,也說明 9 不是質數
flag = false
}
}
if(flag){
alert(`${num}是質數!`)
}else{
alert(`${num}不是質數!`)
}
倒三角:
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5 - i; j++) {
document.write("* ")
}
document.write("<br>")
}
正三角:
for (let i = 0; i < 5; i++) {
for (let j = 0; j < i + 1; j++) {
document.write("* ")
}
document.write("<br>")
}
矩形:
for (let i = 0; i < 5; i++) {
// 建立一個內層迴圈來控制圖形的寬度
for (let j = 0; j < 5; j++) {
document.write("* ")
}
document.write("<br>")
}
九九乘法表小練習:
//只要掌握正三角的方法,寫九九乘法表亦如反掌
for (let i = 0; i < 9; i++) {
for (let j = 0; j < i + 1; j++) {
document.write(`${i + 1}*${j + 1}=${(i + 1) * (j + 1)} `)
}
document.write("<br>")
}
break和continue的區別
break和continue
- break
- break用來終止switch和迴圈語句
- break執行後,當前的switch或迴圈會立刻停止
- break會終止離他最近的迴圈
- continue
- continue用來跳過當次迴圈
----------------------------
for (let i = 0; i < 5; i++) {
console.log(i)
for (let j = 0; j < 5; j++) {
if (j === 1) continue
console.log("內層迴圈--->", j)
}
}