函数默认参数

function sum(a = 0, b = 0) {
  console.log(a + b)
}
sum() // 0

// 在函数调用时,参数默认值会被解析,每次函数调用时都会创建一个新的参数对象
function push(item, array = []) {
  array.push(item)
  return array
}
console.log(push(1)) // [1]
console.log(push(2)) // [2]

剩余参数

function sum(message, ...numbers) {
  console.log('message:', message) // 参数
  console.log('numbers:', numbers) // [1,2,3,4,5,6,7,8]
}
sum('参数', 1, 2, 3, 4, 5, 6, 7, 8)

数组解构

const arr = [1, 2, 3, 4, 5]
const [a, b, c, ...arr2] = arr
console.log(a) // 1
console.log(b) // 2
console.log(c) // 3
console.log(arr2) // [4,5]

// 交换值
let a = 1
let b = 2
;[a, b] = [b, a]
console.log(a, b) // 2 1

// 数组默认赋值
const [a, b = 3] = [1]
console.log(a, b) // 1 3

对象解构

var frank = { name: 'frank', age: 18, gender: 'Male' }
// const name = frank.name
// const age = frank.age
// const gender = frank.gender
var { name, age, gender } = frank

var x = 1
var y = 2
var obj = { x, y } // {x: 1, y: 2}

var obj = { x: 1, y: 2 }
var { x, y } = obj
console.log(x, y) // 1,2
// 嵌套
var frank = {
  name: 'frank',
  age: 18,
  gender: 'Male',
  child: {
    name: 'Tom'
  }
}
var {
  child: { name }
} = frank
console.log(name) // Tom
var {
  child: { name: newName }
} = frank
console.log(newName) // Tom
var {
  child: { name: newName = 'JIM', age = 18, gender }
} = frank
console.log(newName, age, gender) // Tom 18 undefined

// 对象作为参数
function draw({ size = 'big', cords = { x: 0, y: 0 }, radius = 25 } = {}) {
  console.log(size, cords, radius) // big {x: 18, y: 30} 30
}
draw({
  cords: { x: 18, y: 30 },
  radius: 30
})