條件分支語句
條件分支語句刻恭,也叫作條件判斷語句晚顷,就是根據(jù)某種條件執(zhí)行某些語句家凯,不執(zhí)行某些語句。
JS中有三種語法是可以表示條件分支的署鸡。
1.if……else……
條件分支的主力語法案糙,這個主力語法能夠書寫所有的條件分支語句。也就是說靴庆,一會兒我們學(xué)switch case語句时捌,switch case語句能干的,if else語句一定也能干炉抒。
昨天已經(jīng)講過了奢讨,復(fù)習(xí)一下:
標(biāo)準(zhǔn)的完整結(jié)構(gòu):
if(){
}else if(){
}else if(){
}else{
}
else只能有一個,并且一定要放在最后焰薄。表示所有的分支都不滿足的時候執(zhí)行的事情拿诸。
可以沒有else:
if(){
}else if(){
}else if(){
}
可以沒有分支:
if(){
}
看準(zhǔn)樓的位置:
if(8 > 5){
console.log("哈哈");
}
console.log("嘻嘻"); //這行語句不在if里,所以不管if成功沒有塞茅,都執(zhí)行
如果只有一行語句亩码,那么就可以省略大括號:
if(8 > 15)
console.log("哈哈");
console.log("嘻嘻");
跳樓現(xiàn)象,要會合理利用野瘦,比如今天早上的bmi晨早測驗描沟!
var a = 4;
if(a < 8){
a++; //a變?yōu)?,然后跳樓,不會進行下面的a==5的比較了
}else if(a == 5){
a++;
}
console.log(a); //5
2.switch case語句
先來看一個簡單的例子:
switch(xingzuo){
case "白羊座" :
alert("今天要注意調(diào)整自己的狀態(tài)吏廉,有些人的睡眠質(zhì)量比較差");
break;
case "金牛座" :
alert("今天會在感情方面遇到一些小小的問題");
break;
case "雙子座" :
alert("要做好心理準(zhǔn)備會在工作上被他人挑剔找茬蠢络,這是你避免不了的事情");
break;
case "巨蟹座":
alert("工作上要打醒十二分精神,要不然很大可能會經(jīng)常要返工哦");
break;
case "獅子座":
alert("戀愛中的人今天的心有點搖擺不定迟蜜,有人可能會有精神上的出軌");
break;
default :
alert("對不起刹孔,我們沒有收錄你的星座運勢!");
break;
}
語法:
switch(待檢測值){
case 值1 :
值1 與 待檢測值 相同時做的事情
break;
case 值2 :
值2 與 待檢測值 相同時做的事情
break;
case 值3 :
值3 與 待檢測值 相同時做的事情
break;
default :
默認要做的
break;
}
switch case
語句的哲學(xué)是什么娜睛?存在的意義髓霞,簡化了if……else……
的書寫:
你會發(fā)現(xiàn),下面的if語句的分支中畦戒,都是在判斷xingzuo是不是和某一個字符串相等方库,顯得臃腫:
if(xingzuo == "白羊座"){
alert("今天要注意調(diào)整自己的狀態(tài),有些人的睡眠質(zhì)量比較差");
}else if(xingzuo == "金牛座"){
alert("今天會在感情方面遇到一些小小的問題");
}else if(xingzuo == "雙子座"){
alert("要做好心理準(zhǔn)備會在工作上被他人挑剔找茬障斋,這是你避免不了的事情");
}else if(xingzuo == "巨蟹座"){
alert("工作上要打醒十二分精神纵潦,要不然很大可能會經(jīng)常要返工哦");
}else if(xingzuo == "獅子座"){
alert("戀愛中的人今天的心有點搖擺不定,有人可能會有精神上的出軌");
}else{
alert("對不起垃环,我們沒有收錄你的星座運勢邀层!");
}
我們經(jīng)過測試,發(fā)現(xiàn)switch進行相同判斷遂庄,底層是===的比較寥院,連類型一起比較
<script type="text/javascript">
var a = "5";
switch(a){
case 5 :
alert("哈哈"); //不會彈出!涛目!因為類型不一樣
break;
}
</script>
如果不寫break秸谢,那么switch語句就表現(xiàn)的非要有意思,除了執(zhí)行這個case里面的語句之外霹肝,還將無條件的執(zhí)行下面的case的語句估蹄,直到遇見一個break攔住它。
var a = 5;
switch(a){
case 4:
alert("我是4"); //沒有通過驗證沫换,不執(zhí)行
case 5:
alert("我是5"); //彈出
case 6: //無視這行case臭蚁,直接直接這行case里面的語句
alert("我是6"); //彈出,
break; //擋住了苗沧,就不能繼續(xù)往下運行了
case 7:
alert("我是7");
break;
default:
alert("我是默認");
}
//用戶輸入月份刊棕,告訴它這個月有幾天
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
alert("這個月有31天");
break;
case 4:
case 6:
case 9:
case 11:
alert("這個月有30天");
break;
case 2:
alert("這個月一般來說是28天,可能29天");
}
初學(xué)者最最可愛的錯誤是:
switch(month){
case 1 || 3 || 5 || 7 || 8 || 10 || 12 :
alert("這個月有31天");
break;
case 4 || 6 || 9 || 11 :
alert("這個月有30天");
break;
default :
alert("我是默認");
}
這樣寫不行的待逞!因為1 || 3 || 5 || 7
叫做表達式甥角,計算機一遇見表達式,就會計算求值
1 || 3 || 5 || 7 || 8 || 10 || 12
表達式的值是1识樱,等價于case 1:
switch這個語句嗤无,就只能干這種事兒震束。就是把一個值,看情況得幾当犯,執(zhí)行不同的事兒垢村。
如果要在某一個范圍內(nèi),做某件事兒嚎卫,也行嘉栓,不過不建議這么寫。此時應(yīng)該用if……else if……
switch(true){
case score < 60 :
alert("不及格");
break;
case score < 75 :
alert("及格");
break;
case score < 85 :
alert("良好");
break;
case score <= 100 :
alert("優(yōu)秀");
break;
default :
alert("你輸入的成績錯誤");
}
3.三元運算符
? :
是一組運算符拓诸,這是JS中唯一一個需要三個元素參加的運算符侵佃。
條件 ? val1 : val2
表達式的值,要看條件是true還是false奠支。如果條件是true馋辈,那么表達式的值就是val1。如果條件是false倍谜,表達式的值就是val2迈螟。
簡單的例子:
console.log(true ? 3 : 8); //3
console.log(false ? 3 : 8); //8
三元運算符,經(jīng)常這么使用:
員工的年終獎倍數(shù)尔崔,跟月薪有關(guān)答毫。月薪大于8000,系數(shù)就是1.2您旁。否則是1烙常。
var xishu = salary > 8000 ? 1.2 : 1;
等價于:
if(salary > 8000){
xishu = 1.2;
}else{
xishu = 1;5 }
現(xiàn)在總結(jié)一下,條件分支的語句一共有3種鹤盒,但是&& ||短路寫法也有一種選擇的感覺,總共算4種侦副。
if……else if……
(必須立即想到侦锯!這個東西無敵)
switch case
(某一方面很擅長,體現(xiàn)在了代碼的清晰度上)
三元運算符 (賦值的時候秦驯,根據(jù)條件有兩個可能的值尺碰,馬上想到三元運算符)
&&短路寫法 (經(jīng)驗問題,用的不熟悉沒事)
循環(huán)語句
JS中流程控制的語句译隘,就兩個:條件分支亲桥、循環(huán)語句」淘牛靠這兩種語句题篷,就能完成所有的程序。
循環(huán)語句是一系列反復(fù)執(zhí)行直到符合特定條件的命令厅目。
循環(huán)語句能夠解決大量的類似語句書寫番枚。
1.for循環(huán)語句
整體感知:
for(var i = 1 ; i <= 99 ; i++){
console.log("第" + i + "次說我愛你");
}
你就發(fā)現(xiàn)了法严,for循環(huán)就是一個殼子,讓變量i依次葫笼、輪流的值為1深啤、2、3路星、4溯街、……99。
變量i我們稱為循環(huán)變量洋丐,這個變量可以任意設(shè)置呈昔,我們習(xí)慣用i來表示循環(huán)變量
語法上,最最容易錯誤的垫挨,最后沒有分號:
for(var i = 1 ; i <= 99 ; i++;){ ← 錯誤的寫法
console.log("第" + i + "次說我愛你"); 3 }
for循環(huán)的本質(zhì)韩肝,必須搞清楚。
系統(tǒng)遇見了for循環(huán)結(jié)構(gòu)九榔,會立即執(zhí)行語句①哀峻,此時聲明了一個變量i,賦值為1哲泊。
系統(tǒng)會立即檢測剩蟀,是否滿足②這個條件表達式,如果是真切威,則執(zhí)行③育特;如果②是假,則跳出循環(huán)先朦,執(zhí)行語句⑤缰冤。
執(zhí)行完③之后,系統(tǒng)會立即執(zhí)行語句④喳魏,然后再次檢測語句②棉浸,如果為真,則做③刺彩,如果為假迷郑,則做⑤;
執(zhí)行完③之后创倔,系統(tǒng)會立即執(zhí)行語句④嗡害,……
2.窮舉思想
我們初學(xué)者,最最關(guān)鍵的畦攘,就是掌握for循環(huán)的窮舉思想霸妹。
比如,現(xiàn)在要尋找48的所有約數(shù)念搬。
什么是約數(shù): a ÷ b 沒有余數(shù)抑堡,能整除摆出。那么我們稱a是b的倍數(shù),稱b是a的約數(shù)首妖。
計算機是笨笨的偎漫,不能立即告訴你48能整除哪些數(shù),所以有缆,我們就要讓計算機從1開始象踊,一個一個實驗。
我們試試1是不是48的約數(shù)
我們試試2是不是48的約數(shù)
我們試試3是不是48的約數(shù)
……
我們試試48是不是48的約數(shù)
把所有的可能性一一列出棚壁,然后篩選杯矩。全舉法,舉就是列舉的意思袖外。中文比較文縐縐史隆,窮舉法。
欲窮千里目曼验,更上一層樓泌射。
比如,我們現(xiàn)在要尋找水仙花數(shù)鬓照。水仙花數(shù)熔酷,是三位數(shù),每個數(shù)位的立方和等于它本身豺裆。
比如153拒秘, 因為13+53+33 = 1 + 125 + 27 = 153。所以153就是水仙花數(shù)臭猜。
尋找100~999的所有水仙花數(shù)躺酒。
窮舉法,從100~999蔑歌,一個一個試阴颖,
我們試試100是不是水仙花數(shù)
我們試試101是不是水仙花數(shù)
我們試試102是不是水仙花數(shù)
我們試試103是不是水仙花數(shù)
……
我們試試999是不是水仙花數(shù)
for循環(huán),還有一個小應(yīng)用丐膝,叫做累加器。
比如钾菊,我們現(xiàn)在想計算1+2+3+4+……100
var sum = 0; //累加器
for(var i = 1 ; i <= 100 ; i++){
sum = sum + i;
}
console.log(sum);
計算6帅矗!
var sum = 1; //累乘器,累乘器的初值是1
for(var i = 6 ; i >= 1 ; i--){
sum = sum * i;
}
console.log(sum);
如果一個數(shù)恰好等于它的因數(shù)之和煞烫,則稱該數(shù)為“完美數(shù)”浑此。
例如:
第1個完全數(shù)是6,它有因數(shù)1滞详、2凛俱、3紊馏、6,除去它本身6外蒲犬,其余3個數(shù)相加朱监,1+2+3=6。第2個完全數(shù)是28原叮,它有因數(shù)1赫编、2、4奋隶、7擂送、14、28唯欣,除去它本身28外嘹吨,其余5個數(shù)相加,1+2+4+7+14=28境氢。
試尋找1~10000之間的所有完美數(shù)蟀拷。
for(var i = 1 ; i <= 10000 ; i++){
var sum = 0;
for(var j = 1 ; j <= i ; j++){
if(i % j == 0 && i != j){
sum+=j;
}
}
if(i==sum){
console.log("完美!"+i);
}
}