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