## 語句
表達(dá)式在JavaScript中是短語,而語句(`statement`)就是JavaScript整句或命令。
JavaScript語句是以分號(hào)結(jié)束。
默認(rèn)情況下,JavaScript解釋器依照語句的編寫順序依次執(zhí)行。
**1. 表達(dá)式語句**
**(1) 復(fù)合語句**
我們可以用花括號(hào)將多條語句括起來,這就是復(fù)合語句(語句塊)。
```
{
var a = 1;
var b = 1;
}
```
**(2)空語句**
分號(hào)前面可以沒有任何內(nèi)容,JavaScript引擎將其視為空語句。
```
;
```
當(dāng)你使用空語句時(shí),最好加上注釋。
**2. 聲明語句**
`var`和`function`都是聲明語句,它們聲明或定義變量或函數(shù)。
`var`語句用來聲明一個(gè)或多個(gè)變量。
```
var a = 1;
var a =1 ,b=2;
```
注意:如果`var`語句中的變量沒有指定初始化表達(dá)式,那么這個(gè)變量的初始值為undefined。
關(guān)鍵字`function`是用來定義函數(shù)的。
```
function a(){}
```
**3、條件語句**
**(1)if語句**
條件語句是通過判斷指定表達(dá)式的值來決定執(zhí)行還是跳過某些語句。
```
if(expression) {
statement;
}
```
其中的expression(條件)可以是任意表達(dá)式,而且對(duì)這個(gè)表達(dá)式求值的結(jié)果不一定是布爾值。ECMAScript會(huì)自動(dòng)調(diào)用Boolean()轉(zhuǎn)換函數(shù)將這個(gè)表達(dá)式的結(jié)果轉(zhuǎn)換為一個(gè)布爾值。如果對(duì)expression求值為true時(shí),則執(zhí)行statement;如果為false,則跳過。
注意:JavaScript語法規(guī)定,if關(guān)鍵字和帶圓括號(hào)的表達(dá)式之后必須跟隨一條語句,但可以使用語句塊將多條語句合并在一起。
**if..else..**
```
if(expression) {
statement1;
} else {
statement2;
}
```
在JavaScript中,if、else匹配規(guī)則是:else總是和就近的if語句匹配。
推薦使用代碼塊,即使只有一行代碼。
**(2)switch**
```
switch(expression) {
case "": statement ;break;
case "": statement1;break;
....
default: statements; break;
}
```
如果表達(dá)式等于這個(gè)值,則執(zhí)行后面的語句;break關(guān)鍵字會(huì)導(dǎo)致代碼執(zhí)行流跳出switch語句。如果省略break,就會(huì)導(dǎo)致執(zhí)行完當(dāng)前case后,繼續(xù)執(zhí)行下一個(gè)case;當(dāng)`switch`表達(dá)式與所有`case`表達(dá)式都不匹配時(shí),則執(zhí)行`default`。
當(dāng)然,如果你有兩個(gè)值是執(zhí)行同一段代碼的,可以這樣:
```
switch(expression) {
case "":
case "":
statement;break;
.....
}
```
注意:由于對(duì)每個(gè)case的匹配操作實(shí)際是“===”全等運(yùn)算符比較,而不是“==”相等運(yùn)算符比較,因此,表達(dá)式和case的匹配并不會(huì)做任何類型轉(zhuǎn)換。比如字符串"10"不等于數(shù)值10.
**(3)三元運(yùn)算符 ? :**
JavaScript還有一個(gè)三元運(yùn)算符(即該運(yùn)算符需要三個(gè)運(yùn)算子)?:,也可以用于邏輯判斷。
```
(contidion) ? expr1 : expr2
```
上面代碼中,如果contidion為true,則返回expr1的值,否則返回expr2的值。
**4、循環(huán)語句**
循環(huán)語句就是程序路徑的一個(gè)回路,可以讓一部分代碼重復(fù)執(zhí)行。
**(1)while語句**
`while`語句屬于前測試循環(huán)語句,也就是說,在循環(huán)體內(nèi)的代碼被執(zhí)行之前,就會(huì)對(duì)出口條件求值。因此,循環(huán)體內(nèi)的代碼有可能永遠(yuǎn)不會(huì)被執(zhí)行。
語法:
```
while(expression) {
statement
}
```
當(dāng)expression計(jì)算為true時(shí),則執(zhí)行statement。
注意:使用`while(true)`則會(huì)創(chuàng)建一個(gè)死循環(huán)。
**(2)do...while語句**
do...while語句是一種后測試循環(huán)語句,即只有在循環(huán)體中的代碼執(zhí)行之后,才會(huì)測試出口條件。也可以說,在對(duì)條件表達(dá)式求值之前,循環(huán)體內(nèi)的代碼至少會(huì)被執(zhí)行一次。
語法:
```
do {
statement
} while(expression);
```
do...while循環(huán)和while循環(huán)非常相似,但是,do...while的循環(huán)體至少會(huì)執(zhí)行一次。
**(3)for語句**
`for`語句也是一種前測試循環(huán)語句,但它具有在執(zhí)行循環(huán)之前初始化變量和定義循環(huán)后要執(zhí)行的代碼的能力
語法:
```
for(initialize ; test ; increment) {
statement
}
```
initialize、test、increment三個(gè)表達(dá)式之間用分號(hào)隔開,分別負(fù)責(zé)初始化操作、循環(huán)條件判斷和計(jì)數(shù)器變量的更新。
只有test返回true才會(huì)進(jìn)入for循環(huán),因此也有可能不會(huì)執(zhí)行循環(huán)體內(nèi)的代碼。
initialize表達(dá)式只在循環(huán)開始之前執(zhí)行一次。
注意:即使是循環(huán)內(nèi)部定義的變量,在循環(huán)外部也可以訪問到它。
for語句中的初始化表達(dá)式、控制表達(dá)式和循環(huán)后表達(dá)式都是可選的,如果都省略,就會(huì)創(chuàng)建一個(gè)無限循環(huán):
```
for(;;){
//無限循環(huán)
}
```
**注意:**由于JavaScript沒有塊級(jí)作用域,所以在for里面定義的變量都是全局變量。(ES6會(huì)有塊級(jí)作用域)
**(4)for...in語句**
`for..in`語句是一種精準(zhǔn)的迭代語句,可以用來枚舉對(duì)象的屬性。
語法:
```
for(property in object) {
statement
}
```
例子:
```
var o = { name: 'tg', age: 18};
for(var v in o) {
console.log(v + ': ' + o[v]);
}
```
注意:ECMAScript對(duì)象的屬性是沒有順序的,因此通過for...in循環(huán)輸出的屬性名的順序是不可預(yù)測的。
**5. 跳轉(zhuǎn)語句**
`break`語句是強(qiáng)制退出循環(huán),然后執(zhí)行循環(huán)后面的語句。
`continue`語句是終止本次循環(huán)的執(zhí)行并開始下一次循環(huán)的執(zhí)行。
JavaScript中的語句可以命名或帶有標(biāo)簽(label),`break`和`continue`可以跳轉(zhuǎn)到任意位置,也是在JavaScript中唯一可以使用標(biāo)簽語句的語句。
**6. 標(biāo)簽語句**
語句是可以添加標(biāo)簽的,標(biāo)簽是由語句前的標(biāo)識(shí)符和冒號(hào)組成:
```
label : statement
```
label語句定義的標(biāo)簽一般由break或continue語句引用。加標(biāo)簽的語句一般要與for等循環(huán)語句配合使用。
```
var num = 0;
tip : for(var i = 0; i < 10; i++){
num += i;
console.log(i); // 輪流輸出:0、1、2、3、4、5
if(i ==5) {
break tip;
}
}
console.log(num); // 15
```
當(dāng)執(zhí)行到i=5時(shí),會(huì)跳出循環(huán),也就是tip對(duì)應(yīng)的層,然后執(zhí)行其下方的代碼。
**7. 其他語句**
**(1)return語句**
`return`語句只能在函數(shù)體內(nèi)出現(xiàn),否則報(bào)錯(cuò)。當(dāng)執(zhí)行到`return`語句時(shí),函數(shù)終止執(zhí)行,`return`后面的代碼永遠(yuǎn)不會(huì)被執(zhí)行。
**(2)throw語句**
異常是指當(dāng)發(fā)生了某種異常情況或錯(cuò)誤時(shí)產(chǎn)生的一個(gè)信號(hào)。
```
throw expression
try..catch...finally語句
try{
}catch(e){
}finally{
}
```
**(3)with語句**
`with`語句用于臨時(shí)擴(kuò)展作用域鏈,也就是將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中。
```
with(object){
statement
}
```
將object添加到作用域鏈的頭部,然后執(zhí)行statement,最后把作用域鏈恢復(fù)到原生狀態(tài)。
```
var o = {
name: 'tg',
age: 24
};
with(o){
console.log('name:' + name); // name:tg
console.log('age:' + age); // age:24
}
```
with里面的name相當(dāng)于o.name。
**注意**:在嚴(yán)格模式中是禁止使用with語句的。
**(4)debugger語句**
debugger語句用來產(chǎn)生一個(gè)斷點(diǎn)(breakpoint),JavaScript代碼的執(zhí)行會(huì)停止在斷點(diǎn)的位置。一般用來調(diào)試代碼。
**(5)"use strict"**
使用"use strict"指令的目的是說明后續(xù)的代碼將會(huì)解析成嚴(yán)格代碼。
- 前言
- JavaScript簡介
- 基本概念
- 語法
- 數(shù)據(jù)類型
- 運(yùn)算符
- 表達(dá)式
- 語句
- 對(duì)象
- 數(shù)組
- 函數(shù)
- 引用類型(對(duì)象)
- Object對(duì)象
- Array對(duì)象
- Date對(duì)象
- RegExp對(duì)象
- 基本包裝類型(Boolean、Number、String)
- 單體內(nèi)置對(duì)象(Global、Math)
- console對(duì)象
- DOM
- DOM-屬性和CSS
- BOM
- Event 事件
- 正則表達(dá)式
- JSON
- AJAX
- 表單和富文本編輯器
- 表單
- 富文本編輯器
- canvas
- 離線應(yīng)用
- 客戶端存儲(chǔ)(Cookie、Storage、IndexedDB)
- HTML5 API
- Video/Audio
- Geolocation API
- requestAnimationFrame
- File API
- FullScreen API
- IndexedDB
- 檢測設(shè)備方向
- Blob
- vibrate
- Luminosity API
- WebRTC
- Page Visibility API
- Performance API
- Web Speech
- Notification
- 面向?qū)ο蟮某绦蛟O(shè)計(jì)
- 概述
- this關(guān)鍵字
- 原型鏈
- 作用域
- 常用API合集
- SVG
- 錯(cuò)誤處理機(jī)制
- JavaScript開發(fā)技巧合集
- 編程風(fēng)格
- 垃圾回收機(jī)制
