var
- 存在变量提升
- 同一变量重复声明多次只拿到一个结果
- 可以在包含它的函数、模块、命名空间、全局作用域内部任何位置被访问
let 和 const
- 都有块级作用域
- 一个作用域内只能声明一次
- 不能在被声明之前读或写
- 直到声明前的区域都属于『暂时性死区』
- 使用最小特权原则,所有变量除了计划去修改的都应该使用const
type 类型别名
1 | // 给number这个类型命名为second,而second引用这个类型 |
数组解构:『一一对应』
- let [, second, , fourth] = [1, 2, 3, 4]
- 使用…语法创建剩余变量:
1
2let [first, ...rest] = [1, 2, 3, 4];
console.log(first,rest); // 1, [ 2, 3, 4 ]
对象解构:『一一对应』
1 | let o = { |
属性重命名
1 | let { a: newName1, b: newName2 } = o // 从左到右读,a重命名为newName1 |
默认值:属性为 undefined 时使用缺省值
1 | tempObject(wholeObject: { a: string, b?: number }) => { |
函数声明
1 | type C = { a: string, b?: number } |
展开操作符…
数组
1 | let first = [1, 2] |
对象
- 『从左向右处理,所以后面的属性会覆盖前面的属性』
1
2
3
4
5
6
7
8
9
10
11let defaults = { food: "spicy", price: "$$", ambiance: "noisy" }
let search = { ...defaults, food: "rich" }
class C {
p = 12
m() {}
}
let c = new C()
let clone = { ...c }
clone.p // ok
clone.m() // error! 展开对象实例时会丢失方法