switch 語(yǔ)句
switch
語(yǔ)句允許一個(gè)程序求一個(gè)表達(dá)式的值并且嘗試去匹配表達(dá)式的值到一個(gè) case
標(biāo)簽。如果匹配成功,這個(gè)程序執(zhí)行相關(guān)的語(yǔ)句。
語(yǔ)法
switch (expression) {
case value_1:
statements_1
[break;]
case value_2:
statements_2
[break;]
...
default:
statements_def
[break;]
}
工作原理:首先設(shè)置表達(dá)式 expression
(通常是一個(gè)變量)。隨后表達(dá)式的值會(huì)與結(jié)構(gòu)中的每個(gè) case
的值做比較。如果存在匹配,則與該 case
關(guān)聯(lián)的代碼塊會(huì)被執(zhí)行。請(qǐng)使用 break
來(lái)阻止代碼自動(dòng)地向下一個(gè) case
運(yùn)行。
參數(shù)
參數(shù) | 說(shuō)明 |
---|---|
expression |
用于比較的表達(dá)式 |
value_(n) |
與 expression 比較的值 |
statement(n) |
執(zhí)行語(yǔ)句 |
關(guān)鍵詞
-
case
:表示一種情況,如果expression
等于value
,就執(zhí)行statement
-
break
:會(huì)使代碼跳出switch
語(yǔ)句,如果沒(méi)有關(guān)鍵詞break
,代碼執(zhí)行就會(huì)繼續(xù)進(jìn)入下一個(gè)case
。 -
default
:說(shuō)明了表達(dá)式的結(jié)果不等于任何一種情況時(shí)的操作(事實(shí)上,它相對(duì)于 else 從句)。
示例
var myCar = 'Porsche'
switch (myCar) {
case 'Nissan': alert("My car is Nissan");
break;
case 'Honda': alert("My car is Honda");
break;
case 'Porsche': alert("My car is Porsche");
break;
default: alert("I have no car");
}
return 語(yǔ)句
函數(shù)中的 return
語(yǔ)句用來(lái)返回函數(shù)調(diào)用后的返回值
語(yǔ)法
return expression;
說(shuō)明
返回語(yǔ)句特點(diǎn)
-
return
語(yǔ)句只能出現(xiàn)在函數(shù)體內(nèi),如果不是會(huì)報(bào)語(yǔ)法錯(cuò)誤
return 1; // SyntaxError: Illegal return statement
- 由于 JavaScript 可以自動(dòng)插入分號(hào),因此在
return
關(guān)鍵字和它后面的表達(dá)式之間不能有換行。
var test = function fn(){
return
2;
};
console.log(test()); // undefined
- 一個(gè)函數(shù)中可以有多個(gè)
return
語(yǔ)句。
function diff(iNum1, iNum2) {
if (iNum1 > iNum2) {
return iNum1 - iNum2;
} else {
return iNum2 - iNum1;
}
}
函數(shù)進(jìn)程
- 如果沒(méi)有
return
語(yǔ)句,則函數(shù)調(diào)用僅僅依次執(zhí)行函數(shù)體內(nèi)的每一條語(yǔ)句直到函數(shù)結(jié)束,最后返回調(diào)用程序。這種情況下,調(diào)用表達(dá)式的結(jié)果是undefined
。
var test = function fn(){}
console.log(test()); // undefined
- 當(dāng)執(zhí)行到
return
語(yǔ)句時(shí),函數(shù)終止執(zhí)行,并返回 expression 的值給調(diào)用程序
var test = function fn(){
return 2;
};
console.log(test()); // 2
-
return
語(yǔ)句經(jīng)常作為函數(shù)內(nèi)的最后一條語(yǔ)句出現(xiàn),這是因?yàn)?return
語(yǔ)句可用來(lái)使函數(shù)提前返回。當(dāng)return
被執(zhí)行時(shí),函數(shù)立即返回而不再執(zhí)行余下的語(yǔ)句
//并沒(méi)有彈出1
var test = function fn(){
return;
alert(1);
};
console.log(test());//undefined
- 并不是函數(shù)中
return
語(yǔ)句后的所有語(yǔ)句都不執(zhí)行,finally
語(yǔ)句是例外,return
語(yǔ)句不會(huì)阻止finally
子句的執(zhí)行。
function testFinnally(){
try{
return 2;
}catch(error){
return 1;
}finally{
return 0;
}
}
testFinnally(); // 0
返回值
- 如果函數(shù)調(diào)用時(shí)在前面加上了
new
前綴,且返回值不是一個(gè)對(duì)象,則返回this
(該新對(duì)象)
function fn(){
this.a = 2;
return 1;
}
var test = new fn();
console.log(test); // {a:2}
console.log(test.constructor); // fn(){this.a = 2;return 1;}
- 如果返回值是一個(gè)對(duì)象,則返回該對(duì)象。
function fn(){
this.a = 2;
return {a:1};
}
var test = new fn();
console.log(test);//{a:1}
console.log(test.constructor);//Object() { [native code] }
-
return
語(yǔ)句可以單獨(dú)使用而不必帶有表達(dá)式expression
,這樣的話(huà)也會(huì)向調(diào)用程序返回undefined
。
var test = function fn(){
return;
};
console.log(test()); // undefined
總結(jié)
-
return
語(yǔ)句只能出現(xiàn)在函數(shù)體內(nèi) -
return
關(guān)鍵詞和表達(dá)式之間不可換行 - 一個(gè)函數(shù)中可以有多個(gè)
return
語(yǔ)句 - 當(dāng)執(zhí)行
return
語(yǔ)句,函數(shù)終止執(zhí)行,并返回表達(dá)式 -
return
語(yǔ)句不會(huì)阻止finally
子句的執(zhí)行 - 調(diào)用構(gòu)造函數(shù),且返回值不是一個(gè)對(duì)象,則返回該新對(duì)象
- 如果返回值是一個(gè)對(duì)象,則返回該對(duì)象
-
return
語(yǔ)句可單獨(dú)使用而不必帶有表達(dá)式,返回undefined
if 語(yǔ)句
條件語(yǔ)句用于基于不同的條件來(lái)執(zhí)行不同的動(dòng)作。
在 JavaScript 中,我們可使用以下條件語(yǔ)句:
-
if 語(yǔ)句 - 只有當(dāng)指定條件為
true
時(shí),使用該語(yǔ)句來(lái)執(zhí)行代碼 -
if…else 語(yǔ)句 - 當(dāng)條件為
true
時(shí)執(zhí)行代碼,當(dāng)條件為false
時(shí)執(zhí)行其他代碼 - if…else if…else 語(yǔ)句 - 使用該語(yǔ)句來(lái)選擇多個(gè)代碼塊之一來(lái)執(zhí)行
- switch 語(yǔ)句 - 使用該語(yǔ)句來(lái)選擇多個(gè)代碼塊之一來(lái)執(zhí)行
當(dāng)一個(gè)邏輯條件為真,用 if
語(yǔ)句執(zhí)行一個(gè)語(yǔ)句。當(dāng)這個(gè)條件為假,使用可選擇的 else
從句來(lái)執(zhí)行這個(gè)語(yǔ)句。
單層條件判斷
if (condition) {
statement_1;
}
[else {
statement_2;
}] //推薦使用嚴(yán)格的語(yǔ)句塊模式,語(yǔ)句else可選
參數(shù) | 說(shuō)明 |
---|---|
condition |
為任何返回結(jié)果(若非 boolean 類(lèi)型會(huì)被 ECMAScrpt 轉(zhuǎn)換)為 true 或 false 的表達(dá)式。如果條件式為 true ,statement1 會(huì)被執(zhí)行;否則 statement2 會(huì)被執(zhí)行 |
statement1(2) |
為任意語(yǔ)句(代碼塊),甚至可以將另一個(gè) if 語(yǔ)句嵌套七種 |
多層條件判斷
if (condition_1) {
statement_1;
} [else if (condition_2) {
statement_2;
}]
...
[else if (condition_n_1) {
statement_n_1;
}] [else {
statement_n;
}]
要執(zhí)行多個(gè)語(yǔ)句,可以使用語(yǔ)句塊 ({ … }) 來(lái)分組這些語(yǔ)句。
示例
不建議在條件表達(dá)式中
不建議在條件表達(dá)式中使用賦值操作,因?yàn)樵诳焖俨殚喆a時(shí)容易看成等值比較。
請(qǐng)勿使用以下代碼:
if ((x = y)) {
// do something
}
如果你需要在表達(dá)式中使用賦值,通常在賦值語(yǔ)句前后額外添加一對(duì)括號(hào)。
if ((x = y)) {
// do something
}
假值等效值
下面這些值將被計(jì)算出 false
:
false
undefined
null
0
NaN
""
當(dāng)傳遞給條件語(yǔ)句時(shí),所有其他值,包括所有對(duì)象會(huì)被計(jì)算為真。
請(qǐng)不要混淆原始的布爾值 true
和 false
與 Boolean
對(duì)象的真和假。
var b = new Boolean(false);
if (b)
// this condition evaluates to true
if (b == true)
// this condition evaluates to false
for 語(yǔ)句
for 語(yǔ)句 也是一種前測(cè)試循環(huán)語(yǔ)句,但它具有在執(zhí)行循環(huán)之前初始化變量和定義循環(huán)后要執(zhí)行的代碼的能力。
語(yǔ)法
for (initialization; expression; post - loop - expression) {
// statement
}
參數(shù):
-
initialization
初始化表達(dá)式:表達(dá)式通常會(huì)初始化一個(gè)或多個(gè)循環(huán)計(jì)數(shù)器(變量),但語(yǔ)法上是允許一個(gè)任意復(fù)雜度的表達(dá)式,通常為一條聲明賦值語(yǔ)句(只在循環(huán)開(kāi)始之前執(zhí)行一次)。 -
expression
循環(huán)條件判斷:執(zhí)行循環(huán)語(yǔ)句前的判斷語(yǔ)句(通常為比較表達(dá)式),若為true
則執(zhí)行循環(huán)語(yǔ)句,否則則不執(zhí)行循環(huán)語(yǔ)句,并跳出循環(huán)語(yǔ)句。 -
post-loop-expression
計(jì)數(shù)器變量更新:循環(huán)執(zhí)行語(yǔ)句執(zhí)行后執(zhí)行的計(jì)數(shù)器變量更新表達(dá)式,更新循環(huán)計(jì)數(shù)器(變量),以進(jìn)入下一次循環(huán)條件判斷。 -
statement
循環(huán)執(zhí)行語(yǔ)句:當(dāng)循環(huán)條件滿(mǎn)足時(shí)所執(zhí)行的語(yǔ)句,執(zhí)行完畢后執(zhí)行計(jì)數(shù)器變量更新語(yǔ)句(利用break
、continue
語(yǔ)句除外)。
最佳實(shí)踐
代碼示例
var count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
從尾部向前循環(huán)
位數(shù)的整倍循環(huán)
// 五位數(shù)的數(shù)字
const num = 99999;
for (let i = 1; i < num; i *= 10) {
// 被除數(shù) num
// 除數(shù)
const divisor = i * 10;
// 整除部分
const divided = Math.floor(num / divisor);
// 余數(shù)
const remainder = num % divisor;
console.log(i, divisor);
// i divisor
// 1. 1 10
// 2. 10 100
// 3. 100 1000
// 4. 1000 10000
// 5. 10000 100000
}
涉及多個(gè)變量的循環(huán)
for (let i = 0, j = 10; i < 10; i++, j--) {
sum += i * j;
}
若在循環(huán)中一次迭代改變多個(gè)變量,則必須使用到逗號(hào)運(yùn)算符,它將初始化表達(dá)式和自增表達(dá)式合并入一個(gè)表達(dá)式中以用于 for
循環(huán)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-842938.html
可忽略的表達(dá)式
function tail(o) {
// 返回鏈表的最后一個(gè)節(jié)點(diǎn)對(duì)象
for (; o.next; o = o.netx /* empty */);
return; // 根據(jù)判斷 o.next 是不是真值來(lái)執(zhí)行遍歷
}
循環(huán)計(jì)數(shù)器(變量)中一般都是數(shù)字,也是最常用的,但不是必需的。for
循環(huán)中的三個(gè)表達(dá)式中的任何一個(gè)都可以忽略,但是兩個(gè)分號(hào)必不可少。如果 expression
,那么這將是一個(gè)死循環(huán),同樣,和 while(true)
類(lèi)似,死循環(huán)的另一種寫(xiě)法是 for(;;)
。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842938.html
到了這里,關(guān)于【編程向?qū)А縅avaScript-基礎(chǔ)語(yǔ)法-語(yǔ)句和聲明二期講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!