对象解构赋值的基本形式

  1. const { a: renameA } = { a: 1, }

a: 对应被解构对象变量a

renameA: 对变量a的赋值声明

拆解之后可以这样看

  1. const renameA = { a: 1 }.a

数组解构赋值的基本形式

  1. const [a, b, c] = [1, 2, 3,]

a, b, c: 所在的位置对应被解构数组的下标的值,解构出来后被赋值给变量a 变量b 变量c

拆解之后可以这样看

  1. const
  2. a = [1, 2, 3][0],
  3. b = [1, 2, 3][1],
  4. c = [1, 2, 3][2]

数组也是特殊的对象,所以我们也可以对他使用对象的解构赋值方式

  1. let arr = [1, 2, 3]
  2. let { 0: first, [arr.length - 1]: last, length: len } = arr
  3. console.log(first) // 1
  4. console.log(last) // 3
  5. console.log(len) // 3

如果给赋值变量加上()呢?

  1. [(x)] = [3] // 可以
  2. ([x]) = [3] // 不可以 左边是表达式 匹配规则不符,所以直接报错

解构的隐式转换

  1. var [a, b, c] = 'hello' // 返回包装类 String('hello')
  2. console.log(a, b, c) // 'h' 'e' 'l'
  3. var { length } = 'hello'
  4. console.log(length) // 5
  5. var { length } = [1, 2, 3, 4,]
  6. console.log(length) // 4
  7. var { toString: arrToString } = [] // 返回包装类 Array([])
  8. var { toString: strToString } = '' // 返回包装类 String('')
  9. var { toString: numToString } = 0 // 返回包装类 Number('hello')