ES6展开运算符(...)

这是在网上看见的es6展开运算符的总结,原文地址:http://www.jianshu.com/p/c5230c11781b

作者:可木Changer
链接:http://www.jianshu.com/p/c5230c11781b
來源:简书

总结还可以,借鉴下

 

三个点(...)在es6中,有两个含义:

  用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式:  在形参面前加三个点( ... )

  用在数组前面,可以把数组的值全部打散,展开,叫展开运算符. 语法格式:  在数组面前加三个点( ... )

 

不使用Apply的函数调用

我们经常使用Function.prototype.apply,传递一个数组作为参数,使用数组中存放的一组参数调用一个函数。

function doStuff (x, y, z) { } var args = [0, 1, 2]; // 调用函数,传递args参数 doStuff.apply(null, args);

采用展开用算符我们能够在避免使用apply的同时,轻易的调用函数。只需在数组前加上展开运算符即可。

doStuff(...args);

这段代码变得更短,更清晰,并且不需要使用多余的null!

合并数组

已经有好多种合并数组的方法,但是展开运算符带来了一种全新的方式。

arr1.push(...arr2) // 将arr2 追加到数组的末尾
arr1.unshift(...arr2) // 将arr2 追加到数组的开头

如果你想要整合两个数组,并且想把某个数组放在另一个数组的任意特定位置上,你可以这么做:

var arr1 = ['two', 'three'];
var arr2 = ['one', ...arr1, 'four', 'five']; // ["one", "two", "three", "four", "five"]

这是一种比其他方式更短的语句!

拷贝数组

得到一份数组的拷贝是很常见的任务,过去我们使用Array.prototype.slice来做,但现在我们可以使用展开运算符:

var arr = [1,2,3]; var arr2 = [...arr]; // 和arr.slice()差不多 arr2.push(4)

记住:数组中的对象依然是引用值,所以不是任何东西都“拷贝”过去了。

arguments或者NodeList转换为Array

像拷贝数组一样,我们常常使用Array.Prototype.slice来将NodeListarguments这种类数组对象转换为真正的数组。但是现在我们能够用展开运算符轻易的实现这项任务:

[...document.querySelectorAll('div')]

使用此法,你甚至可以像数组一样获取参数。

var myFn = function(...args) { // ... }

别忘了你也能用Array.from达成相同的目的!

使用Math函数

当然了,展开运算符将数组“展开”成为不同的参数,所以任何可接收任意数量的参数的函数,都能够使用展开运算符来传参。

let numbers = [9, 4, 7, 1]; Math.min(...numbers); // 1

Math对象的一系列的方法,正是展开运算符作为唯一参数传递给函数的完美例子。

解构的乐趣

解构是一项很棒的实践方法,我在自己的React项目中以及Node.js 程序中大量的使用到它。你能够使用解构和展开运算符将信息解压到你想要的变量中去:

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; console.log(x); // 1 console.log(y); // 2 console.log(z); // { a: 3, b: 4 }

剩余的属性被分配到了展开运算符之后的z变量中。

转载于:https://www.cnblogs.com/zhangjiabin/p/7648024.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QC与IE8 、WINDOWS 7 兼容问题的解决方案

QC与win7不兼容 1、 通过开始菜单搜索框,输入UAC,会出现“更改用户帐户控制设置”(ChangeUser Account Control菜单 项。点击打开后,通过滚动条选择“从不通知”。 2、 打开cmd命令行,运行如下命令:bcd…

修改build:gradle版本

打开项目build.gradle文件dependencies下找到classpath com.android.tools.build:gradle:3.1.2 // classpath org.greenrobot:greendao-gradle-plugin:3.0.0 修改数字部分,如2.3.0或3.0.1或3.0.0等等 try即可

process.cwd __dirname __filename 区别

process.cwd() 就是说process.cwd()返回的是当前Node.js进程执行时的工作目录。 __dirname: 当前模块的目录名。 等同于 __filename 的 path.dirname()。__dirname 实际上不是一个全局变量,而是每个模块内部的。 __filename 获得当前执行文件的带有完整绝对路径的…

Oracle 数据泵使用——导入、导出

今天重新整理了下数据泵的使用,用数据泵完成数据的导出、导入,真的很方便,现将操作及语句记录下来。 第一步:导出数据 用数据泵导出原库的数据,这个不需要进行其他的操作,直接在导出的机器直接执行下面语…

Error:Connection timed out: connect

1、打开项目build.gradle,找到dependencies {classpath com.android.tools.build:gradle:3.0.1// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files } 修改版本号为当前安装的版本号&#xff0c…

Microsoft SQL Server 全角转半角函数

先创建函数,函数如下 CREATE FUNCTION f_Convert( str NVARCHAR(4000), --要转换的字符串 flag bit --转换标志,0转换成半角,1转换成全角 )RETURNS nvarchar(4000) AS BEGIN DECLARE pat nvarchar(8),step int,i int,spc int IF flag0 SELECT patN%[!-&a…

typescript mongodb 教程搜集

https://tutorialedge.net/typescript/typescript-mongodb-beginners-tutorial/

工作118:封装一个带有对话框的button组件

buttondialog.vue <!--定义一个有按钮的对话框 相当于dialog和按钮组合使用--> <template><!-- 有按钮的对话框 这个位置的代码会被包裹过去--><!--close-on-click-modal 是否可以通过点击 modal 关闭 Dialog append-to-body控制不能出现遮挡层--><…

测试常用工具下载地址,LR11、QC11

LR11下载地址&#xff1a; http://kuai.xunlei.com/d/QRNIUASALOIE QC11&#xff08;ALM 11&#xff09;下载地址&#xff1a; http://www.everbox.com/f/lZZqM1dpRAWNhjVrv8EZJE8Z4W

Android 获取经纬度,地理位置,省市区

申请百度key&#xff1a;http://lbsyun.baidu.com/ 1、jar包下载地址&#xff1a;https://pan.baidu.com/s/1J-boj0ct9oJ8YjXMR8X4KA 下载并复制到libs下&#xff0c;Add As Library 如需获取SHA1值&#xff1a;https://blog.csdn.net/meixi_android/article/details/72547966…

PHP中的__get()和__set()方法获取设置私有属性

在类的封装中&#xff0c;获取属性可以自定义getXXX()和setXXX()方法&#xff0c;当一个类中有多个属性时&#xff0c;使用这种方式就会很麻烦。为此PHP5中预定义了__get()和__set()方法&#xff0c;其中__get()方法用于获取私有成员属性值&#xff0c;__set()方法用于为私有成…

node 遍历读取制定后缀文件名

我的需求就是读取指定文件夹中&#xff0c;后缀为.js的文件。有两种方法解决。 1、不依赖插件&#xff1a; import * as fs from fs; import * as Path from path; const files fs.readdirSync(__dirname).filter(function (file) {return Path.extname(file).toLowerCase() …

前端学习(2618):vue插槽--默认插槽

插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot></slot>标签。 如下代码&#xff1…

有关禅道的学习记录

最近公司准备重新搭一个项目管理平台&#xff0c;上网搜了都推荐禅道 &#xff0c;立该找到官网先学习一下&#xff0c; 官网: http://www.zentao.net 首先来看看安装吧&#xff0c; 下载地址是 http://www.zentao.net/download/79918.html这个&#xff0c;不会用&…

Android 自动检测更新,自动下载apk更新版本

注意&#xff1a;华为手机需要先上架华为应用市场才可以自动更新apk。其他手机可能也需要先上架 关于安卓8.0不显示下载通知问题&#xff1a;https://blog.csdn.net/meixi_android/article/details/83379335 适配安卓10.0关于安卓8.0不能自动安装问题&#xff1a;https://blog…

typescript 接口 interface 的理解

在学习typescript的时候&#xff0c;经常发现别人写了好多接口&#xff08;interface&#xff09;&#xff0c;那问题来了&#xff0c;我们自己写代码&#xff0c;应该在什么情况下写接口才比较合适呢。于是我就找了找资料&#xff0c;整理一下。 接口运行时的影响为 0。TypeS…

前端学习(2619):vue插槽--具名插槽

插槽的最最简单使用&#xff0c;上面已有例子&#xff0c;这里就不写了&#xff0c;接下来看看&#xff0c;插槽其他使用场景 插槽的使用 - 具名插槽 描述&#xff1a;具名插槽其实就是给插槽娶个名字。一个子组件可以放多个插槽&#xff0c;而且可以放在不同的地方&#xff…

程序的灵魂-----算法

一个程序应包括以下两方面的内容&#xff1a; 1、 转载于:https://www.cnblogs.com/lzhn/p/7650689.html