運(yùn)算符和邏輯分支
一窥翩、運(yùn)算符
1向楼、一元運(yùn)算符
-
概述
只能操作一個(gè)值的運(yùn)算符叫做一元運(yùn)算符
var a = ++b; //加后取值先執(zhí)行加法運(yùn)算, 再取值 var a = b++; //加前取值先取值, 再執(zhí)行加法運(yùn)算
-
其他類(lèi)型應(yīng)用一元運(yùn)算符的規(guī)則
var b = '89'; b++; //90,數(shù)值字符自動(dòng)轉(zhuǎn)換成數(shù)值 var b= 'ab'; b++; //NaN,字符串包含非數(shù)值轉(zhuǎn)成NaN var b = false; b++;//1,false轉(zhuǎn)成數(shù)值0,累加就是1 var b = 2.3; b++; //3.3,直接加1
2、關(guān)系運(yùn)算符
[圖片上傳失敗...(image-58870f-1631947680114)]
-
概述
用于進(jìn)行比較的運(yùn)算符稱(chēng)作為關(guān)系運(yùn)算符
-
關(guān)系運(yùn)算符如下:
小于(<)、大于(>)、小于等于(<=)驼侠、大于等于(>=)、
相等(
==
)谆吴、不等(!=)倒源、全等(恒等)(===
)、不全等(不恒等)(!==) -
關(guān)系運(yùn)算符的比較規(guī)則:
- 數(shù)字和數(shù)字比較, 直接比較大小
- 數(shù)字和字符串比較, 字符串轉(zhuǎn)換為數(shù)字后再比較
- 字符串和字符串比較, 進(jìn)行字符的ASCII碼值比較
-
字符與ASCII值互轉(zhuǎn)
var str = "A"; str.charCodeAt(); var num = 97; String.fromCharCode(num); // 'a'
-
比較注意事項(xiàng):
- 布爾值 ture=1, false=0
Number(true)
- 只要不等于NaN, 就是true,其他有NaN的運(yùn)算都為false
- 如果要恒等, 則必須值和類(lèi)型都要相等;
- 布爾值 ture=1, false=0
關(guān)系運(yùn)算符(特殊值)
運(yùn)算 | 結(jié)果 |
---|---|
null == undefined | true |
'NaN' == NaN | false |
5 == NaN | false |
NaN == NaN | false |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
'100' == 100 | true |
'100' === 100 | false |
3句狼、邏輯運(yùn)算符
-
說(shuō)明
邏輯運(yùn)算符通常用于布爾值的操作笋熬,一般和關(guān)系運(yùn)算符配合使用,有三個(gè)邏輯運(yùn)算符:邏輯與(AND)鲜锚、邏輯或(OR)、邏輯非(NOT)
[圖片上傳失敗...(image-2cd58c-1631947680114)]
-
注意
邏輯與&&運(yùn)算符屬于短路操作苫拍,顧名思義芜繁,如果第一個(gè)操作數(shù)返回是false,第二個(gè)數(shù)不管是true還是false都會(huì)返回false绒极。
邏輯或||運(yùn)算符也是短路操作骏令。當(dāng)?shù)谝徊僮鲾?shù)的求值結(jié)果為true, 就不會(huì)對(duì)第二個(gè)操作數(shù)求值了垄提。
-
短路效果
var a = 1; console.log(a++ || true) console.log(a) console.log(true || a++)
-
邏輯非(NOT):!
-
概述
邏輯非運(yùn)算符可以用于任何值榔袋。無(wú)論這個(gè)值是什么數(shù)據(jù)類(lèi)型,這個(gè)運(yùn)算符都會(huì)返回一個(gè)布爾值铡俐。它的流程是:先將這個(gè)值轉(zhuǎn)換成布爾值凰兑,然后取反,
-
規(guī)則如下:
- ?操作數(shù)是一個(gè)空字符串,返回true; 非空字符串, 返回false
- ?操作數(shù)是數(shù)值0,返回true; 任意非0數(shù)值(包括 Infinity),返回false
- ?操作數(shù)是NaN, 返回true
- ?操作數(shù)是undefined, 返回true
-
4审丘、賦值運(yùn)算符與復(fù)合賦值運(yùn)算符
-
概述:
- 賦值運(yùn)算符用等于號(hào)(=)表示吏够,就是把右邊的值賦給左邊的變量。
-
復(fù)合賦值運(yùn)算符通過(guò)x=的形式表示,x表示算術(shù)運(yùn)算符锅知。
如:=播急、+=, -=, *=, /=, %=等
[圖片上傳失敗...(image-34b9fb-1631947680114)]
5、算數(shù)運(yùn)算符和其他運(yùn)算符:
算數(shù)運(yùn)算符:+售睹,-,*, /, %(取余數(shù))
-
三目運(yùn)算符: ?:
字符串運(yùn)算符: 字符串運(yùn)算符只有一個(gè)桩警,即:“+”。它的作用是將兩個(gè)字符串相加昌妹。規(guī)則:至少一個(gè)操作數(shù)是字符串
實(shí)例: 3>5?'大于':'不大于'
二捶枢、流程控制
1、共有三種基本結(jié)構(gòu):
順序:從上朝下執(zhí)行的代碼就是順序
分支(選擇):根據(jù)不同的情況捺宗,執(zhí)行對(duì)應(yīng)代碼
循環(huán):重復(fù)做一件事情
2柱蟀、順序結(jié)構(gòu)
順序結(jié)構(gòu)是最簡(jiǎn)單的程序結(jié)構(gòu),它是由若干個(gè)依次執(zhí)行的處理步驟組成的蚜厉。如圖长已,A語(yǔ)句和B語(yǔ)句是依次執(zhí)行的,只有在執(zhí)行完A語(yǔ)句后昼牛,才能接著執(zhí)行B語(yǔ)句术瓮。
3、分支結(jié)構(gòu)
-
概述
在處理實(shí)際問(wèn)題時(shí)贰健,只有順序結(jié)構(gòu)是不夠的胞四,經(jīng)常會(huì)遇到一些條件的判斷,流程根據(jù)條件是否成立有不同的流向伶椿。如下圖所示辜伟,程序根據(jù)給定的條件P是否成立而選擇執(zhí)行A操作或B操作。這種先根據(jù)條件做出判斷脊另,再?zèng)Q定執(zhí)行哪一種操作的結(jié)構(gòu)稱(chēng)為分支結(jié)構(gòu)导狡,也稱(chēng)為選擇結(jié)構(gòu)。
-
IF單分支
if條件判斷語(yǔ)句的寫(xiě)法:
if(表達(dá)式){ 執(zhí)行語(yǔ)句 }
當(dāng)括號(hào)內(nèi)的表達(dá)式結(jié)果成立(為true時(shí))偎痛,則執(zhí)行大括號(hào)內(nèi)的語(yǔ)句旱捧,否則不執(zhí)行。
-
注意
if后面的()不能省略踩麦。
一條執(zhí)行語(yǔ)句可以省略{}, 多條時(shí)不能省略{}, 建議不管是一條還是多條都寫(xiě)上{}
-
簡(jiǎn)寫(xiě)
if(0>1) console.log('大于') if(0>1) console.log('大于')
-
-
IF雙分支語(yǔ)句
格式
if(表達(dá)式){ 執(zhí)行語(yǔ)句1 }else{ 執(zhí)行語(yǔ)句2 }
當(dāng)if括號(hào)內(nèi)的表達(dá)式結(jié)果成立枚赡,執(zhí)行執(zhí)行語(yǔ)句1,否則執(zhí)行執(zhí)行語(yǔ)句2;
-
判斷一個(gè)年份是閏年還是平年谓谦;
能被4整除而不能被100整除.(如2004年就是閏年,1800年不是.)
能被400整除.(如2000年是閏年))
-
簡(jiǎn)寫(xiě)
if(0>1) console.log('大于') else console.log('不大于')
-
-
IF多分支語(yǔ)句
if多分支語(yǔ)句的寫(xiě)法:
if(表達(dá)式){ 執(zhí)行語(yǔ)句1 } else if(表達(dá)式2){ 執(zhí)行語(yǔ)句2 } else if(表達(dá)式3){ 執(zhí)行語(yǔ)句3 } else{ 執(zhí)行語(yǔ)句n }
從上往下贫橙,滿(mǎn)足哪個(gè)條件就執(zhí)行其相對(duì)應(yīng)的語(yǔ)句,都不滿(mǎn)足時(shí)反粥,執(zhí)行最后的
else
的語(yǔ)句料皇,只能進(jìn)入其中之一
-
IF的嵌套
將整個(gè)if語(yǔ)句塊插入另一個(gè)if語(yǔ)句塊中
if (表達(dá)式1) { if (表達(dá)式2) { if (表達(dá)式3){ 語(yǔ)句; } else{ 語(yǔ)句; } } else{ 語(yǔ)句; } }
注意:嵌套if時(shí)谓松,最好不要超過(guò)三層; 內(nèi)層的每一對(duì)if...else代碼要縮進(jìn)且對(duì)齊践剂;編寫(xiě)代碼時(shí)鬼譬,else要與最近的if配對(duì)。
-
4逊脯、switch語(yǔ)句
-
格式
switch(表達(dá)式) { case 常量1:語(yǔ)句; break; case 常量2:語(yǔ)句; break; case 常量n:語(yǔ)句; break; default:語(yǔ)句; break; }
-
概述
表達(dá)式的結(jié)果等于哪個(gè)case的常量优质,則執(zhí)行其后的語(yǔ)句,執(zhí)行完break就跳出switch結(jié)構(gòu)军洼,都不滿(mǎn)足則執(zhí)行default的語(yǔ)句巩螃。
-
break的作用
是跳出switch結(jié)構(gòu),如果沒(méi)有break匕争,則繼續(xù)執(zhí)行下面分支的的語(yǔ)句(而不進(jìn)行判斷)避乏。
-
注意case穿透,要加break
switch的應(yīng)用場(chǎng)景:表達(dá)式為固定值,不能判斷范圍
5甘桑、循環(huán)結(jié)構(gòu)
-
概述
需要重復(fù)執(zhí)行同一操作的結(jié)構(gòu)稱(chēng)為循環(huán)結(jié)構(gòu)拍皮,即從某處開(kāi)始,按照一定條件反復(fù)執(zhí)行某一處理步驟跑杭,反復(fù)執(zhí)行的處理步驟稱(chēng)為循環(huán)體
-
循環(huán)的分類(lèi)
- while循環(huán)
- do-while循環(huán)
- for循環(huán)
for in
forEach
-
while循環(huán)語(yǔ)法格式:
while(表達(dá)式) { 執(zhí)行代碼; } 注意: 1, while循環(huán)必須按照上述語(yǔ)法格式來(lái)寫(xiě), 只能更改表達(dá)式內(nèi)容和執(zhí)行代碼. 2, 表達(dá)式可以是常量,變量或者其他表達(dá)式,該表達(dá)式會(huì)被強(qiáng)制轉(zhuǎn)換為boolean類(lèi)型, 可以理解表達(dá)式就是循環(huán)的條件. 3, 執(zhí)行代碼可以有多行, {}所包含的稱(chēng)為循環(huán)體. 4, 表達(dá)式不要一直是true, 避免死循環(huán). 5. while循環(huán)的順序是: 先判斷表達(dá)式是否為true, 若true則執(zhí)行執(zhí)行代碼, 然后再繼續(xù)判斷表達(dá)式是否為true, …. 直到判斷表達(dá)式為false才會(huì)跳出循環(huán), 執(zhí)行while后面的代碼 while循環(huán)一般會(huì)有: 循環(huán)初始值, 循環(huán)條件 和 循環(huán)變量增量(或者減量) do{ }while(); 練習(xí): 打印100以?xún)?nèi) 7的倍數(shù) 打印100以?xún)?nèi)的奇數(shù) 打印100以?xún)?nèi)所有偶數(shù)的和 打印圖形 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
實(shí)例
左側(cè)正三角形
var j=1; do{ var I=1; do{ document.write(i) I++ }while(i<=j); document.write('<br>') j++ }while(j<=9);
-
右側(cè)倒三角形
//右側(cè)倒三角線 var j=9; do{ //控制空格字符的輸出 var k = 9-j; do{ if(j==9){ break; } document.write('*'); k--; }while(k>=1); //輸出右側(cè)三角形的元素 var i = j; do{ document.write(i); I--; }while(i>=1); document.write('<br />'); //控制行的輸出 j--; }while(j>=1);
-
-
for循環(huán)語(yǔ)法格式
- 主體結(jié)構(gòu)
for (表達(dá)式1; 表達(dá)式2;表達(dá)式3){ 執(zhí)行代碼; }
- 實(shí)例
for(var i=0;i<5;i++){ console.log(i) } for循環(huán)將 循環(huán)初始值, 循環(huán)條件, 循環(huán)變量增量寫(xiě)在了一起 注意: 三個(gè)表達(dá)式都是可選填寫(xiě), 但是如果后兩個(gè)不寫(xiě),會(huì)造成死循環(huán); 而第一個(gè)為初始化值,所以我們?nèi)齻€(gè)一般都要寫(xiě)上.
- 簡(jiǎn)寫(xiě)
var I=1; for(;;){ if(i>100){ break; } document.write(i+'<br />'); i++; }
- 注意:
- 表達(dá)式1:可寫(xiě)循環(huán)初始值, (可以不填)
- 表達(dá)式2: 循環(huán)條件
- 表達(dá)式3: 循環(huán)增量(減量)
- 兩個(gè)分號(hào)必須寫(xiě).
-
For in 返回索引值
for(var i in Array){ console.log(i) }
-
forEach 返回值
Array.forEach(function(arg){ console.log(arg) });
-
break關(guān)鍵字
在switch語(yǔ)句中使流程跳出switch結(jié)構(gòu)铆帽。
-
在循環(huán)語(yǔ)句中使流程跳出當(dāng)前循環(huán)
注意:
如果已執(zhí)行break語(yǔ)句,就不會(huì)執(zhí)行循環(huán)體中位于break后的語(yǔ)句德谅。
在多層循環(huán)中爹橱,一個(gè)break語(yǔ)句只向外跳一層
-
continue關(guān)鍵字
只能在循環(huán)語(yǔ)句中使用,使本次循環(huán)結(jié)束窄做,即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句愧驱,接著進(jìn)行下次是否執(zhí)行循環(huán)的判斷。
注意:
- continue語(yǔ)句只能用在循環(huán)里椭盏。
- 對(duì)于while和do-while循環(huán)组砚,continue語(yǔ)句執(zhí)行之后的動(dòng)作是條件判斷;對(duì)于for循環(huán)庸汗,隨后的動(dòng)作是變量更新惫确。