# 變量
聲明變量(數字、字符、下劃線及$);
初始化變量,賦初值;
單個var聲明多個變量,用逗號分隔;
區分大小寫;
# 操作符
# 基本數據類型
* 數字——number
* 字符串——string
* 布爾值——boolean
* undefined——訪問不存在的變量,未被定義
* null——沒有值、空值,已被定義
## 查看類型——typeof
### number
當一個數字以0開頭時,就表示一個八進制數;
當以0x開頭時,就表示一個十六進制數。
指數形式
> 1e2、1e+2、1E2、1E+2——(在1后面加2個0)
Infinity 無限數
NaN 非數
### string
string轉number
```
var s = '1'; s = 3 * s; typeof s;
// "number"
var s = '1'; s++; typeof s;
// "number"
var s = '100'; typeof s;
// "string"
s = s * 1;
// 100
typeof s;
// "number"
```
### boolean
如果在一個非布爾值上執行邏輯運算,該值會在計算期間被轉換位布爾值:
```
var b = "one"; !b;
// false
var b = ""; !b;
// true
var b = "one"; !!b; // ?Boolean:雙反即本身;非布爾值先轉成取反布爾值,再取反變自身
// true
var b = ''; !!b; // 空值即false
// false
var a = undefined; !!a;
// false
var a = null; !!a;
// false
```
> 雙重取反轉換為等效布爾值
>**falsy**?:空字符串""/ null/ undefined/ 數字0/ 數字NaN/ 布爾值false
> **truthy**:其他值
> 代碼可讀性:盡量使用括號而非優先級來設定代碼的執行順序
#### 惰性求值 ?
利用 **邏輯與/或** 可以執行若干邏輯操作,在第三庫中較常見
```
// 當window對象中未定義$時,才將$指向Zepto
window.$ === undefined && (window.$ = Zepto)
true || false || true || false || true
// true
var a = 5; true || (a = 6); a;
// 5 a=6未執行
true && (a = 6); a;
// 6
```
```
true || "something";
// true
true && "something";
// "something"
// 如果變量mynum已經被定義了,就保留其原有值,否則賦值10
var mynum = mynum || 10; mynum;
// 10
```
### 比較運算符 ?
| 操作符 | 名稱 | 說明 |
| --- | --- | --- |
| == | 相等運算符 | 在比較前,兩邊的操作數會被自動轉換為相同類型 |
| === | 等價運算符 | 不進行類型轉換,值和類型都要相同才為true |
```
// NaN不等于任何東西,包括它自己
NaN === NaN
// false
```
### undefined & null
變量不存在或未經賦值,訪問都會返回undefined;
不同的是,只能通過代碼賦為null;
```
var i = 1 + undefined; i;
// NaN
var i = 1 + null; i;
// 1
```
```
!!undefined;
// false
!!null;
// false
```
```
"" + null;
// "null"
"" + undefined;
// "undefined"
```
# 數組
用于存儲數據的列表;
索引位置從0開始;
用一對方括號來指定元素的索引值,`arr[index]`;
數組可存儲數組;
## 增加、更新
`arr[index] = 數值;` index不存在,增加值;index存在,更新值
## 刪除
`delete arr[index];`
# 循環
## 代碼塊
被包括在0對或多對大括號中的那一段代碼
> 代碼可讀性:使用分號;/ 統一縮進格式/ 盡量使用大括號。
### if條件表達式
簡單時,可使用三元運算符替代
很多else if時,使用`switch(a){ case x: break; default:;}`替代
### 檢查變量是否存在
```
var result = '';
if(somevar){result = 'yes';}
// Uncaught ReferenceError: somevar is not defined
if(!!somevar){result = 'yes'}
// Uncaught ReferenceError: somevar is not defined
result;
// ""
```
檢查變量是否存在,更好的選擇是使用typeof ?
```
var result = '';
if(typeof somevar !== 'undefined'){result = 'yes'};
result;
// ""
```
## 循環
while
do-while
for(初始化; 循環條件; 自增操作)
> 循環條件值部分可以放在初始化中,減少計算操作;
for-in 遍歷對象
for-of 遍歷數組等iterable對象
forEach