前言

由于ES6和Babel的出现,编写JavaScript代码变得难以置信的灵活,从新的语法到自定的编译器,像JSX。我变成了扩展运算符(Spread Operator)的超级粉丝,三个点就改变你编写JavaScript代码的方式。接下来的清单,列出了我在JavaScript中最喜欢怎样使用扩展运算符!

1.不使用Apply去调用函数

这一点我们叫它Function.prototype.apply,传递一个参数数组,调用一个函数,并把数组中的每一项拆分成单个参数传递给函数:function doStuff (x, y, z) { }

var args = [0, 1, 2];

// 调用函数,传递参数

doStuff.apply(null, args);

通过扩展运算符我们可以避免使用apply,只需简单的调用函数,并在参数数组前加上扩展运算符:doStuff(...args);

这让代码更简短、清晰,而且不需要无用的null!

2.合并数组

一直以来,有很多方法合并数组,但是扩展运算符给了我们全新的方法去实现合并数组:arr1.push(...arr2) // 把arr2合并到arr1的后面

arr1.unshift(...arr2) //把arr2合并到arr1的前面

如果你想在数组内合并数组,你可以像下面这样做:var arr1 = ['two', 'three'];

var arr2 = ['one', ...arr1, 'four', 'five'];

// ["one", "two", "three", "four", "five"]

比其他方法的语法更简单,还增加了位置的控制!

3.复制数组

复制数组是我们常常要做的工作,在过去,我们会使用Array.prototype.slice去实现,但现在我们可以使用扩展运算符去得到一个复制后的数组:var arr = [1,2,3];

var arr2 = [...arr]; // 就像 arr.slice()

arr2.push(4)

记住:数组仍通过指针得到,所以我们并没有复制数组本身,我们复制的只是一个新的指针。

4.把arguments或NodeList转为数组

和复制数组十分类似,我们以前使用Array.prototype.slice去把NodeList和arguments转换成真正的数组,但现在我们可以使用扩展运算符去完成这个工作:[...document.querySelectorAll('div')]

你还可以让arguments在传递时就变成一个数组:

var myFn = function(...args) {

//译者注:args等同于[...arguments]

}

别忘了,用Array.from也能达到效果。

5.使用Math函数

扩展运算符把数组”扩展”成一个个不同的参数是理所当然的,所以,可以在任何函数参数上进行扩展,而且它能接收任意多个参数:let numbers = [9, 4, 7, 1];

Math.min(...numbers); // 1

在Math对象的成员方法上使用扩展运算符是一个完美的例子,而且只需要传递一个参数。

6.有趣的结构赋值

结构赋值是一个十分有趣的实践,我在自己的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 }

剩下的属性会自动分配给拥有扩展运算符的变量!

总结

ES6不仅让JavaScript更复杂,也让它更有趣了。现代浏览器都支持新的ES6语法,所以,如果你还没有花时间去了解并使用它,你清楚你该怎么做。如果你要开始使用ES6,一定要来看看我的这篇文章Getting Started with ES6。不管怎样,扩展运算符都是JavaScript中一个非常有用的特性,你应该已经清楚的意识到了!

c语言扩展运算符是什么,扩展运算符的6个重要用途相关推荐

  1. c语言程序设计运算符及表达式,c语言程序设计3第3章运算符和表达式

    1.第3章 运算符和表达式,3.1 表 达 式 3.2 运算符及表达式 3.3 运算符优先级和结合性,3.1 表 达 式,C语言的表达式分为基本表达式和复杂表达式. 基本表达式是由以下单项构成的,即: ...

  2. c语言程序设计运算符及表达式,C语言程序设计3第3章运算符和表达式.ppt

    退出退出 第3章 运算符和表达式 3.1 表 达 式 3.2 运算符及表达式 3.3 运算符优先级和结合性 3.1 表 达 式 C语言的表达式分为基本表达式和复杂表达式. 基本表达式是由以下单项构成的 ...

  3. c语言作业扩展名通常为什么,C语言的源程序通常的扩展名是( )

    C语言的源程序通常的扩展名是( ) 更多相关问题 [C20]A.asB.afterC.untilD.when Although I spoke to her about the matter seve ...

  4. c语言程序计算p q真值表,C语言程序设计第2章数据类型﹒运算符和表达式.ppt

    C语言程序设计第2章数据类型﹒运算符和表达式 教学目标 掌握C语言标识符的组成 理解C语言的基本数据类型 掌握变量定义的方法 掌握常用的运算符的使用 掌握混合运算的数据转换方法 2.1 C语言的数据类 ...

  5. 二进制补码求值用c语言,C语言程序设计第2章数据类型.运算符与表达式.ppt

    C语言程序设计第2章数据类型.运算符与表达式 教学目标 掌握C语言标识符的组成 理解C语言的基本数据类型 掌握变量定义的方法 掌握常用的运算符的使用 掌握混合运算的数据转换方法 2.1 C语言的数据类 ...

  6. 华农c语言计算高精度加法_考研计算机 | 运算符与表达式算术运算符

    一.算术运算符与算术表达式 (一)基本的算术运算符+加法运算符,或正值运算符3+5.+3–减法运算符,或负值运算符5-2.-3* 乘法运算符3*5/除法运算符5/3%模运算符,或称求余运算符,%两侧均 ...

  7. 当c语言表达式中同时有字符 整数,c语言第2章数据类型、运算符与表达式a.ppt

    c语言第2章数据类型.运算符与表达式a C语言程序设计;本章主要学习任务;2.1 C的数据类型;注意:C语言中的数据有变量与常量,它们分别属于上述这些类型.;2.2 常量与变量;不是C语句,不必在行末 ...

  8. Oracle和sql语言,SQL语言的四种类型和ORACLE运算符

    数据定义语言(DDL) 数据操作语言(DML) 数据控制语言(DCL) 事务控制语言(TCL) Data Definition Language(DDL) DDL使我们有能力创建或删除表格.也可以定义 ...

  9. 用 Go 语言给 Lua/OpenResty 写扩展

    用 Go 语言给 Lua/OpenResty 写扩展 https://www.lbbniu.com/3477.html 背景 最近的一个lua项目中需要解析wbxml,WBXML是XML的二进制表示形 ...

最新文章

  1. python selenium 点击开始按钮_使用Selenium和Python单击一个按钮
  2. 一只小蜜蜂(HDU-2044)
  3. Ubuntu目录结构简单介绍笔记
  4. 一路踩坑构建Dubbo源码
  5. Android 自动化测试框架简介
  6. 米家扩展程序初始化超时_一套完整的PLC程序是什么样子
  7. 格式工厂 wav 比特率_IQmango Converter下载-IQmango Converter(音视频格式转换工具)v3.4.6免费版...
  8. 高一计算机课程教案,高一信息技术教案第一章
  9. 一文解决scrapy带案例爬取当当图书
  10. 通用 DAO 接口设计
  11. 三种振幅调制AM、DSB、SSB
  12. 实体零售纷纷转型,苏宁、乐语到底能给我们带来哪些启示?
  13. Linux应用基础与实训小结
  14. WEB前端:(3)HTML5②超链接及页面内跳转
  15. 计算火车运行时间 本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间
  16. 路飞学城-Python爬虫实战密训-第1章
  17. 【面试】web前端经典面试题试题及答案-es6
  18. 微信小程序——背景音乐播放
  19. 使用matlab实现ISD悬架离散仿真分析
  20. 监考安排系统java代码_基于jsp的监考安排与查询-JavaEE实现监考安排与查询 - java项目源码...

热门文章

  1. 从第一范式(2nf)到第二范式(3nf)_啥是数据库范式
  2. kafka版本_Apache Kafka 版本演进及特性介绍
  3. php为什么查询语句加上order by就显示不出来,sql会查出结果 php页面偶尔显示空白 没有从sql得到结果...
  4. cmake字符串转数组_JS 数组中你或许不知道的操作
  5. python3 turtle 在哪下载安装_Python3 turtle安装和使用教程
  6. git指令如何葱master转到dev_看完这篇还不会用Git,那我就哭了
  7. hibernate的查询条件lt_鱼与熊掌得兼:Hibernate与Mybatis共存
  8. object转class_从零并发框架(三)异步转同步注解+字节码增强代理实现
  9. php mysql encode_PHP json_encode mysql结果
  10. Linux3种进程,linux内核获取进程的全路径3种方法