JS 的基本語法

一、JS的“語句”和“表達式”

JavaScript 程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是一個語句。

語句(statement)是為了完成某種任務而進行的操作,比如下面就是一行賦值語句。

vara =1+3;

這條語句先用var命令,聲明了變量a,然后將1 + 3的運算結果賦值給變量a。

1 + 3叫做表達式(expression),指一個為了得到返回值的計算式。語句和表達式的區(qū)別在于,前者主要為了進行某種操作,一般情況下不需要返回值;后者則是為了得到返回值,一定會返回一個值。凡是 JavaScript 語言中預期為值的地方,都可以使用表達式。比如,賦值語句的等號右邊,預期是一個值,因此可以放置各種表達式。

語句以分號結尾,一個分號就表示一個語句結束。多個語句可以寫在一行內(nèi)。

vara =1+3;varb ='abc';

分號前面可以沒有任何內(nèi)容,JavaScript 引擎將其視為空語句。

;;;

上面的代碼就表示3個空語句。

表達式不需要分號結尾。一旦在表達式后面添加分號,則 JavaScript 引擎就將表達式視為語句,這樣會產(chǎn)生一些沒有任何意義的語句。

二、關于標識符

標識符(identifier)指的是用來識別各種值的合法名稱。最常見的標識符就是變量名,以及后面要提到的函數(shù)名。JavaScript 語言的標識符對大小寫敏感,所以a和A是兩個不同的標識符。

標識符有一套命名規(guī)則,不符合規(guī)則的就是非法標識符。JavaScript 引擎遇到非法標識符,就會報錯。

簡單說,標識符命名規(guī)則如下。

第一個字符,可以是任意 Unicode 字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)。

第二個字符及后面的字符,除了 Unicode 字母、美元符號和下劃線,還可以用數(shù)字0-9。

下面這些都是合法的標識符。

arg0

_tmp

$elem

π

下面這些則是不合法的標識符。

1a//? ? ?第一個字符不能是數(shù)字

23//? ? ?同上

***//? ? ?標識符不能包含星號

a+b//? ? 標識符不能包含加號

-d//? ? ? ?標識符不能包含減號或連詞線

中文是合法的標識符,可以用作變量名。

var臨時變量 =1;

JavaScript 有一些保留字,不能用作標識符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

三、if 語句

if結構先判斷一個表達式的布爾值,然后根據(jù)布爾值的真?zhèn)危瑘?zhí)行不同的語句。所謂布爾值,指的是 JavaScript 的兩個特殊值,true表示真,false表示偽。

if(布爾值)??

語句;

// 或者? if(布爾值) 語句;

上面是if結構的基本形式。需要注意的是,“布爾值”往往由一個條件表達式產(chǎn)生的,必須放在圓括號中,表示對表達式求值。如果表達式的求值結果為true,就執(zhí)行緊跟在后面的語句;如果結果為false,則跳過緊跟在后面的語句。

if(m ===3)??

m = m +1;

上面代碼表示,只有在m等于3時,才會將其值加上1。

這種寫法要求條件表達式后面只能有一個語句。如果想執(zhí)行多個語句,必須在if的條件判斷之后,加上大括號,表示代碼塊(多個語句合并成一個語句)。

if(m ===3)?{?

?m +=1;

}

建議總是在if語句中使用大括號,因為這樣方便插入語句。

注意,if后面的表達式之中,不要混淆賦值表達式(=)、嚴格相等運算符(===)和相等運算符(==)。尤其是賦值表達式不具有比較作用。

varx =1;

vary =2;

if(x = y) {

????console.log(x);

}

// "2"

上面代碼的原意是,當x等于y的時候,才執(zhí)行相關語句。但是,不小心將嚴格相等運算符寫成賦值表達式,結果變成了將y賦值給變量x,再判斷變量x的值(等于2)的布爾值(結果為true)。

這種錯誤可以正常生成一個布爾值,因而不會報錯。為了避免這種情況,有些開發(fā)者習慣將常量寫在運算符的左邊,這樣的話,一旦不小心將相等運算符寫成賦值運算符,就會報錯,因為常量不能被賦值。

if(x =2) {// 不報錯

if(2= x) {// 報錯

至于為什么優(yōu)先采用“嚴格相等運算符”(===),而不是“相等運算符”(==),請參考《運算符》章節(jié)。

四、if...else 語句

if代碼塊后面,還可以跟一個else代碼塊,表示不滿足條件時,所要執(zhí)行的代碼。

if(m ===3) {

// 滿足條件時,執(zhí)行的語句

}else{// 不滿足條件時,執(zhí)行的語句

}

上面代碼判斷變量m是否等于3,如果等于就執(zhí)行if代碼塊,否則執(zhí)行else代碼塊。

對同一個變量進行多次判斷時,多個if...else語句可以連寫在一起。

if(m ===0) {// ...

}else if(m ===1) {// ...

}else if(m ===2) {// ...

}else{// ...

}

else代碼塊總是與離自己最近的那個if語句配對。

五、while 循環(huán)語句

While語句包括一個循環(huán)條件和一段代碼塊,只要條件為真,就不斷循環(huán)執(zhí)行代碼塊。

while(條件)??

語句;

// 或者while(條件) 語句;

while語句的循環(huán)條件是一個表達式,必須放在圓括號中。代碼塊部分,如果只有一條語句,可以省略大括號,否則就必須加上大括號。

while(條件) { 語句;

}

下面是while語句的一個例子。

var i =0;

while(i <100) {

console.log('i 當前為:'+ i);? i = i +1;

}

上面的代碼將循環(huán)100次,直到i等于100為止。

下面的例子是一個無限循環(huán),因為循環(huán)條件總是為真。

while(true) {

console.log('Hello, world');

}

六、for 循環(huán)

for語句是循環(huán)命令的另一種形式,可以指定循環(huán)的起點、終點和終止條件。它的格式如下。

for(初始化表達式; 條件; 遞增表達式)??

語句

// 或者?for (初始化表達式; 條件; 遞增表達式) {??

語句

}

for語句后面的括號里面,有三個表達式。

初始化表達式(initialize):確定循環(huán)變量的初始值,只在循環(huán)開始時執(zhí)行一次。

條件表達式(test):每輪循環(huán)開始時,都要執(zhí)行這個條件表達式,只有值為真,才繼續(xù)進行循環(huán)。

遞增表達式(increment):每輪循環(huán)的最后一個操作,通常用來遞增循環(huán)變量。

下面是一個例子。

var x =3;

for(var i =0; i < x; i++) {

console.log(i);

}// 0// 1// 2

上面代碼中,初始化表達式是var i = 0,即初始化一個變量i;測試表達式是i < x,即只要i小于x,就會執(zhí)行循環(huán);遞增表達式是i++,即每次循環(huán)結束后,i增大1。

所有for循環(huán),都可以改寫成while循環(huán)。上面的例子改為while循環(huán),代碼如下。

var x =3;

var i =0;

while(i < x) {

console.log(i);? i++;

}

for語句的三個部分(initialize、test、increment),可以省略任何一個,也可以全部省略。

for( ; ; ){console.log('Hello World');}

上面代碼省略了for語句表達式的三個部分,結果就導致了一個無限循環(huán)。

七、break 語句和continue語句

break語句和continue語句都具有跳轉作用,可以讓代碼不按既有的順序執(zhí)行。

break語句用于跳出代碼塊或循環(huán)。

var i =0;

while(i <100) {

console.log('i 當前為:'+ i);??

i++;

if(i ===10) break;

}

上面代碼只會執(zhí)行10次循環(huán),一旦i等于10,就會跳出循環(huán)。

for循環(huán)也可以使用break語句跳出循環(huán)。

for(var i =0; i <5; i++) {

console.log(i);

if(i ===3) break;

} // 0// 1// 2// 3

上面代碼執(zhí)行到i等于3,就會跳出循環(huán)。

continue語句用于立即終止本輪循環(huán),返回循環(huán)結構的頭部,開始下一輪循環(huán)。

var i =0;

while(i <100){??

i++;

if(i %2===0) continue;

console.log('i 當前為:'+ i);

}

上面代碼只有在i為奇數(shù)時,才會輸出i的值。如果i為偶數(shù),則直接進入下一輪循環(huán)。

如果存在多重循環(huán),不帶參數(shù)的break語句和continue語句都只針對最內(nèi)層循環(huán)。

八、label(標簽)

JavaScript 語言允許,語句的前面有標簽(label),相當于定位符,用于跳轉到程序的任意位置,標簽的格式如下。

label:

? 語句

標簽可以是任意的標識符,但不能是保留字,語句部分可以是任意語句。

標簽通常與break語句和continue語句配合使用,跳出特定的循環(huán)。

top:

for(var i =0; i <3; i++){

? ??for(var j =0; j <3; j++){

? ??????if(i ===1&& j ===1) break top;

? ??????console.log('i='+ i +', j='+ j);? ?

??? ???}?

?}? ?

?// i=0, j=0

// i=0, j=1

// i=0, j=2

// i=1, j=0

上面代碼為一個雙重循環(huán)區(qū)塊,break命令后面加上了top標簽(注意,top不用加引號),滿足條件時,直接跳出雙層循環(huán)。如果break語句后面不使用標簽,則只能跳出內(nèi)層循環(huán),進入下一次的外層循環(huán)。

標簽也可以用于跳出代碼塊。

foo:?

????{? console.log(1);?

? ? ? ? break foo;

? ? ? ? console.log('本行不會輸出');

? ? ?}?

? ? ? ? console.log(2);

// 1

// 2

上面代碼執(zhí)行到break foo,就會跳出區(qū)塊。

continue語句也可以與標簽配合使用。

top:

for(var i =0; i <3; i++){

????for(var j =0; j <3; j++){

????????if(i ===1&& j ===1)? continue? top;

????????????console.log('i='+ i +', j='+ j);? ?

? ? ? }?

?}

// i=0, j=0

// i=0, j=1

// i=0, j=2

// i=1, j=0

// i=2, j=0

// i=2, j=1

// i=2, j=2

上面代碼中,continue命令后面有一個標簽名,滿足條件時,會跳過當前循環(huán),直接進入下一輪外層循環(huán)。如果continue語句后面不使用標簽,則只能進入下一輪的內(nèi)層循環(huán)。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一、JavaScript和ECMAScript的關系 1996年8月,微軟模仿JavaScript開發(fā)了一種相近的...
    瘋狂的蝸牛Dianna閱讀 531評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,060評論 0 2
  • 前端07班 王語句JavaScript程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是...
    ea203453e188閱讀 991評論 0 4
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,257評論 0 38
  • 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就是一個語句。 ...
    米塔塔閱讀 507評論 1 10

友情鏈接更多精彩內(nèi)容