標籤:
# 文法概述
## JavaScript的引入方式
1. 直接在`script`標籤內部書寫代碼
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
console.log(‘hello, world‘);
</script>
</head>
<body>
</body>
</html>
```
2. 通過`script`標籤的`src`屬性,引入外部的JavaScript檔案
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript" src="./index.js"></script>
</body>
</html>
```
## 資料類型
在JavaScript中一種有5種原始類型
- 數實值型別(`number`)
- 字串類型(`string`)
- 布爾實值型別(`boolean`)
- null
- undefined
## 變數的命名規則
命名規則:
- 第一個字元可以是任意Unicode大小寫字母,以及貨幣符號($)和底線(_)。
- 第二個字元及後面的字元,還可以用數字。
- 不能使用保留字作為變數名
##### *JavaScript保留字*
`abstract`
`boolean` `break` `byte`
`case` `catch` `char` `class` `const` `continue`
`debugger` `default` `delete` `do` `double`
`else` `enum` `export` `extends`
`false` `final` `finally` `float` `for` `function`
`goto`
`if` `implements` `import` `in` `instanceof` `int` `interface`
`long`
`native` `new` `null`
`package` `private` `protected` `public`
`return`
`short` `static` `super` `switch` `synchronized`
`this` `throw` `throws` `transient` `true` `try` `typeof`
`var` `void` `volatile`
`while` `with`
*example*
#### 合法的命名規則
`arg0`
`_tmp`
`$elem`
`π`
#### 不合法的命名規則
`1a`
`23`
`***`
`a+b`
`-d`
`var`
`return`
## 操作符
ECMA-262描述了一組用於操作資料值的操作符,包括算術操作符(如加號和減號)、位操作符、關係操作符和相等操作符。
#### 一元操作符
1. 遞增和遞減操作符(`++` `--`)
2. 一元加和減操作符
###### 對非數值應用一元加操作符時,該操作符會把這個數值強制轉換成數實值型別
#### 算術操作符
`+` `-` `*` `/` `%`
#### 邏輯操作符
不同類型的值轉換成布爾值
##### 對象 => `true`
##### Null 字元串 => `false`
##### 非Null 字元串 => `true`
##### 數值0 => `false`
##### 任意非0數值(包括`Infinity`) => `true`
##### `null` => `false`
##### `NaN` => `false`
##### `undefined` => `false`
1. 邏輯非(`!`)
###### 邏輯非運算子有一個歎號(`!`)表示,可以用於JS中任何值。無論這個值是什麼資料類型,該操作符都會返回一個布爾值。
###### 操作不同類型值的傳回值
###### 1. 如果該值是一個對象,返回`false`
###### 2. 如果該值是一個Null 字元串,返回`true`
###### 3. 如果該值是一個非Null 字元串,返回`false`
###### 4. 如果該值是一個數值`0`,返回`true`
###### 5. 如果該值是任意非`0`數值(包括`Infinity`),返回`false`
###### 6. 如果該值是`null`,返回`true`
###### 7. 如果該值是`NaN`,返回`true`
###### 8. 如果該值是`undefined`,返回`true`
2. 邏輯與(`&&`)
###### 邏輯與有兩個和號(`&&`)表示,有兩個運算元,可以操作JS中的任意兩個值。當兩個資料值都是布爾值的時候,該操作符會返回布爾值。如果有一個數值不是布爾值,那麼則不一定會返回布爾值。
###### 但有一個資料值不是布爾值的時候,它的返回結果遵循以下規則:
###### 1. 如果第一個運算元是對象,則返回第二個運算元
###### 2. 如果第二個運算元是對象,則只有在第一個運算元的求值結果為`true`的情況下才會返回該對象
###### 3. 如果兩個運算元都是對象,那麼會返回第二個運算元
###### 4. 如果有一個運算元是`null`,那麼返回`null`
###### 5. 如果有一個運算元是`NaN`,那麼返回`NaN`
###### 6. 如果有一個運算元是`undefined`,那麼返回`undefined`
3. 邏輯或(`||`)
###### 邏輯或操作符有兩個豎線符號(`||`),有兩個運算元,可以操作JS中的任意兩個值。
###### 如果兩個運算元都是布爾值,只有在兩個運算元都為`false`的時候才會返回`false`,否則返回`true`。
###### 如果有一個運算元不是布爾值,則遵循以下規則:
###### 1. 如果第一個運算元是對象,則返回第一個運算元
###### 2. 如果第一個運算元的求值結果為`false`,則返回第二個運算元
###### 3. 如果兩個數都是對象,則返回第一個運算元
###### 4. 如果兩個運算元都是`null`,則返回`null`
###### 5. 如果兩個運算元都是`NaN`,則返回`NaN`
###### 6. 如果兩個運算元都是`undefined`,則返回`undefined`
4. 短路操作
###### 在`與`操作符(`&&`)和`或`操作符(`||`)中,如果第一個運算元就已經能確定最終返回的結果,那麼就不會去計算第二個運算元了
## 關係操作符
小於(`<`)、大於(`>`)、小於等於(`<=`)、大於等於(`>=`)這幾個關係操作符用於對兩個值進行比較,比較的規則與我們在上數學課上所學的一樣。這幾個操作符都會返回一個布爾值。
## 相等操作符
相等操作符(`==`)、不相等操作符(`!=`)、全等操作符(`===`)、不全等操作符(`!==`)
#### 相等和不相等 => 先轉換類型再比較
#### 全等和不全等 => 僅比較而不轉換類型
## 賦值操作符
簡單的賦值操作符由等號(`=`)表示,起作用就是把右側的值賦給左側的變數。
## 條件操作符(三目運算子)
`boolean_expression ? true_value : false_value`
## 運算子的優先順序
| 運算子 | 描述 |
| ---------------------------------------- | -------------------------- |
| `++` `--` `-` `+` `~` `!` `delete` `new` `typeof` `void` | 一元運算子、返回資料類型、對象建立、未定義值 |
| `*` `/` `%` | 乘法、除法、模數 |
| `+` `-` `+` | 加法、減法、字串串連 |
| `<<` `>>` `>>>` | 移位 |
| `<` `<=` `>` `>=` `instanceof` | 小於、小於等於、大於、大於等於、instanceof |
| `==` `!=` `===` `!==` | 等於、不等於、嚴格相等、非嚴格相等 |
| `&&` | 邏輯與 |
| `\|\|` | 邏輯或 |
| `?:` | 條件 |
| `=` | 賦值、運算賦值 |
下表按從最高到最低的優先順序列出JavaScript運算子。具有相同優先順序的運算子按從左至右的順序求值。
## 代碼注釋
源碼中被JavaScript引擎忽略的部分就叫做注釋,它的作用是對代碼進行解釋。Javascript提供兩種注釋:一種是單行注釋,用 `//` 起頭;另一種是多行注釋,放在 `/*` 和 `*/` 之間。
```javascript
// 單行注釋
/*
*
* 多行注釋
*
**/
```
js文法概述