# 基础学习

# Symbol类型

TODO

https://segmentfault.com/a/1190000004365693

# 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

  • 示例
// 对象
let obj = {a: 1, b: 3, c: 4}
let {a, b, c} = obj
console.log(a) // 1
console.log(b) // 3
console.log(c) // 4
// 如果属性值不存在,解构出来的值是undefined
let {a, b, c, d} = obj
console.log(d) // undefined


// 数组
let arr = [10, 20, 30]
let [a, b, c, d] = arr
console.log(a) // 10
console.log(b) // 20
console.log(c) // 30
console.log(d) // undefined
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let {a, b, ...obj} = {a: 1, b: 2, c: 3, d: 4}
console.log(a) // 1
console.log(b) // 2
console.log(obj) // {c: 3, d: 4}

let {...val} = {a: 1, n: 8, m: 90}
val = {a: 1, n: 8, m: 90}


let [a, b, ...arr] = [1, 2, 3, 4, 5, 6]
console.log(a) // 1
console.log(b) // 2
console.log(arr) // [3, 4, 5, 6]

let [...arr] = [3, 4, 5, 7]
console.log(arr) // [3, 4, 5, 7]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

注意

如果被解构的不是对象或数组,则会报错

# 解构赋值允许指定默认值

注意

只有当一个数组成员严格等于undefined,默认值才会生效。 ES6 内部使用严格相等运算符(===),所有'', false, null都默认有值,不会赋值默认值

  • 示例
let {a = 1, b = 2} = {a: 6}
console.log(a) // 6
console.log(b) // 2


let obj = {a: '', b: false, c: null, d: undefined, f: 5}
let {a = 1, b = 2, c = 3, d = 4, e = 6} = obj
console.log(a) // ''
console.log(b) // false
console.log(c) // null
console.log(d) // 4
console.log(f) // 5
1
2
3
4
5
6
7
8
9
10
11
12

和ES6解构赋值不同的是,ES5 赋值的属性值为null undefined false '' 的时候均能够赋值默认值

因为在 ES5 中的默认赋值我们会使用要判断的属性名加上||再加上默认值来绑定,所以只要对象的属性值能够转换为boolean的 false,默认值绑定就会成功,所以上文中我们使用的null undefined false ''都可以赋值成功。

  • ES5
let obj = {a: '', b: false, c: null, d: undefined, f: 5}
let a = obj.a || 1 // 1
let b = obj.b || 2 // 2
let c = obj.c || 3 // 3
1
2
3
4