# 变量
声明变量(数字、字符、下划线及$);
初始化变量,赋初值;
单个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