ES6/ES7 三点式 —— 扩展运算符与剩余操做符

ES6 标准提供给 JavaScript 开发者许多简化代码的新特性,今天要介绍的扩展运算符就是很是经常使用的一种。能够使你的代码更加简洁优雅。javascript

扩展运算符

扩展运算符以三个点的形式出现 ... 能够将数组或者对象里面的值展开。前端

const a = [1, 2, 3]

console.log(a) // 1 2 3

const b = {a: 1, b: 2}

console.log({c: 3, ...b}) // {a: 1, b: 2, c: 3}

扩展运算符的应用

接下来看看扩展运算符的常见应用。java

1.复制数组和复制对象es6

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

// 至关于 b = a.slice()

console.log(a) // [1, 2, 3]
console.log(b) // [1, 2, 3]
console.log(a === b) // false
const a = {a: 1, b: 2}
const b = {...a}

console.log(a) // {a: 1, b: 2}
console.log(b) // {a: 1, b: 2}
console.log(a === b) // false

// 至关于 const b = Object.assign({}, a)

要注意复制时候只会进行浅复制。数组

2.合并数组和合并对象antd

const a = [1, 2, 3]
const b = [4, 5]

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

// 至关于 a.concat(b)
const a = {a: 1, b: 2}
const b = {b: 3, c: 4}

console.log({...a, ...b, c: 5}) // {a: 1, b: 3, c: 5}

// 至关于 Object.assign(a, b, {c: 5})

3.类数组对象数组化app

前端开发当中常常会遇到一些类数组对象,如:function 的 arguments,document.querySelectorAll 等,一般会将这些类数组对象转换为数组的形式使其能够利用数组原型对象的方法。code

const divs = document.querySelectorAll('divs')

// divs.push 会报错

// slice 方式

divs = [].slice.call(divs)

// 使用扩展运算符

divs = [...divs]

4.代替 apply 方法对象

function sum(x, y, z) {
  console.log(x + y + z)
}

const args = [1, 2, 3]
// apply 方式

fn.apply(null, args)

// 扩展运算符方式

fn(...args)

剩余操做符

另一种以三个点 ... 形式出现的是剩余操做符,与扩展操做符相反,剩余操做符将多个值收集为一个变量,而扩展操做符是将一个数组扩展成多个值。blog

// 配合 ES6 解构的新特性
const [a, ...b] = [1, 2, 3]

console.log(a) // 1
console.log(b) // [2, 3]

最后再看一个例子,在平常开发当中很是常见,并且同时利用到扩展操做符和剩余操做符,在 React 开发当中经常会利用一些组件库,为了业务须要咱们会将一些组件库提供的组件封装成业务组件方便开发。

import { Button } from 'antd'  // 组件库提供的组件

function MyButton({ isDanger, children, ...others }) {
  return (
    <div>
      {isDanger ? 
        <Button {...others} size="large" type="danger">{children}</Button> :
        <Button {...others} size="small" type="primary">{children}</Button>
      }
    </div>
  )
}

本文同步于个人我的博客 http://blog.acwong.org/2017/09/23/es6-destructuring-assignment/

相关文章
相关标签/搜索