[TOC]
# 語句、表達式和運算符
## 表達式和語句的構成
JavaScript 的源代碼本質上是一個語句的集合。語句是由語句和表達式所構成的。表達式則是由表達式和運算符構成的。
可以被分解為保留字、表達式與符號。即使在一條語句中包含其他語句,只要對這條被包含的語句繼續進行分解,最終都會變為僅包含保留字、表達式與符號的狀態。對于表達式來說,雖然也能在一句表達式中包含其他的表達式,不過只要對所包含的表達式進行分解,最終總是能達到僅包含標識符、字面量與運算符的狀態。
## 標識符
命名規則:
- 必須是除保留字以外的單詞
- 必須是除true、false、null以外的單詞
- 必須是以 Unicode 的(非空)字符開始,之后接有 Unicode 字符或是數字的單詞
- 單詞的長度并無限制
在實際的編程過程中應遵循:以英文字符、下劃線或$開始,之后接有英文字符、下劃線、$、數字的單詞。習慣上以下劃線開始的標識符會被作為“內部標識符”來使用。
## 字面量
在代碼中寫下這些值之后,將會在運行時直接使用這些值的字面含義。
## 語句
語句(statement)的定義可以由該語言經過明確定義的語法(syntax)規則得到,并且可以在運行程序時執行(execute)語句。
## 代碼塊(復合語句)
代碼塊是在大括號({})中所寫的語句,以此將多條語句的集合視為一條語句來使用。ECMAScript 中代碼塊的變量并不存在塊級作用域這樣的概念。
## if-else 語句
```javascript
if (條件表達式){
語句
}else if (條件表達式){
語句
}else{
語句
}
```
條件表達式的位置所寫的式子,將被求值轉換為布爾型。
## switch-case 語句
```javascript
switch (語句){
case 表達式1:
語句
break;
case 表達式2:
語句
break;
case 表達式3:
語句
break;
...
default:
語句
break;
}
```
用于跳轉目標的作用。可以有多個 case 標簽,但是只有一個 default 標簽。使用 break 來跳出 switch 語句。
## while 語句
```javascript
while (條件表達式){
語句
}
```
一旦開始執行 while 語句,就先對條件表達式進行求值。如果值為 false,則不會執行循環部分的語句,并結束改 while 語句。如果值為 true,則執行該語句。語句執行完成之后,會再次對條件表達式進行求值。直到值為 false。
以下情況會從 while 循環中退出:
- 保證在循環過程中條件表達式的值將變為 false
- 在循環內部使用 break 語句
- 在循環內部使用 return 語句
- 在循環內部拋出異常
## for 語句
一般被稱為 for 循環。
```javascript
for (初始化表達式; 條件表達式; 更新表達式){
語句
}
```
其中的三個表達式都是可以省略的。
在初始化表達式中,通常會寫諸如 `i=0` 這樣對變量進行初始化的表達式。初始化表達式中對循環變量進行初始化,在更新表達式中對循環變量進行更新,在條件表達式中檢查循環變量的值。
## for in 語句
```javascript
for (變量 in 對象表達式){
語句
}
```
in 的左側是在語句中供賦值的表達式,能夠在循環時對其進行操作。in 的右側是 Object 類型的表達式。
## for each in 語句
```javascript
for each (變量 in 對象表達式){
語句
}
```
for each in 語句并不是把屬性名賦值給變量,而是將屬性值賦值給他。
```javascript
var obj = {
x: 1,
y: 2,
z: 3
};
for each (var v in obj){
console.log(v) // 1 2 3
}
```
## break 語句
在循環中有時需要中途跳出,可以使用 break 語句。
## continue 語句
在循環中使用 continue 語句,就會跳過在此之后本次循環內尚未執行的語句。
## return 語句
return 語句會中斷函數的處理,并將指定的表達式的值作為函數的返回值返回。如果沒有指定表達式,函數的返回值將會是 undefined。
## 異常
```javascript
throw 表達式;
try {
語句
} catch(變量名) {
語句
} finally {
語句
}
```
通過 throw 拋出異常,通過 try-catch-finally 捕獲異常。finally 始終都會執行。
## in 運算符
in 用于檢驗屬性是否存在的運算符,其運算結果為布爾值。
## instanceof 運算符
instanceof 是一種用于類型判斷的運算符,其運算結果為布爾值。
## 三目運算符
```javascript
條件表達式 ? 表達式1 : 表達式2;
```
條件表達式的操作數會首先被求值。得到的值將會轉換為布爾型,如果為 true,則對表達式1進行求值。如果為 false,則對表達式2進行求值。
## delete 運算符
用于刪除屬性的單目運算符。從對象中刪除以操作數指定的屬性。運算結果為布爾值。如果被刪除或屬性不存在則為 true,反之為 false