0.看文档呀

关于拓展运算符更详细的解释见 》 MDN展开语法

关于剩余参数更详细的解释见 》MDN剩余参数

关于解构赋值更详细的解释见 》MDN解构赋值

直接看上面的文档更好

1.前言

最近学习vue源码的时候,看到编译类的时候一些函数用到了三点运算符,这里总结一下用法,记录一下

value = expr.replace(/\{\{(.+?)\}\}/g, (...args) => {
return this.getVal(args[1], vm);
});
[...childNodes].forEach((child) => {
if (this.isElementNode(child)) {
//是元素节点
//编译元素节点
this.compileElement(child);
} else {
//文本节点
//编译文本节点
this.compileText(child);
}
//递归调用处理所有元素节点
if (child.childNodes && child.childNodes.length) {
this.compile(child);
}
});

2.三点运算符

三点运算符为对象的扩展运算符,用于取出参数对象中的所有可遍历属性,拷贝到 当前的对象之中,拓展运算符拷贝的是对象中的基本数据类型,并不是对原有对象的引用,因此修改当前对象中的值不会影响原有对象中的值

任何 Iterator 接口的对象(参阅 Iterator 一章),都可以用扩展运算符转为真正的数组。

let foo = {a:1,b:2}
let bar = {...foo} //{a:1,b:2}

不用es6语法等价于

let foo = {a:1,b:2}
let bar = Object.assign({},foo)//{a:1,b:2}

Object.assign 方法用于对象的合并,将源对象中所有可枚举的属性复制到目标对象

该方法接受两个参数--目标对象和源对象,源对象会对目标对象中的同名属性进行覆盖

同样,拓展运算符也可以运用在对数组的操作中

let foo = [1,2,3]
let bar = [...foo] //[1,2,3]

将nodelist转换成数组

function node2array(nodeList){
return [...nodeList]
}

将arguments对象转换成数组,为了在arguments对象上使用Array方法,它必须首先被转换为一个真正的数组。

function args2array(args){
return [...args]
}

开头提到的[...childeNodes]就是将nodeList转换成array之后再进行遍历的

3.剩余参数

(...args)为剩余参数用法

剩余参数语法允许我们将一个不定量的参数表示为一个数组

value = expr.replace(/\{\{(.+?)\}\}/g, (...args) => {
return this.getVal(args[1], vm);
});

这里(...args)将所有的传入参数转换成数组并赋值给args

同样剩余参数也可以用于解构赋值

value = expr.replace(/\{\{(.+?)\}\}/g, (...[a,b,c,d]) => {
return this.getVal(b, vm);
});

这里将传入的参数按照顺序分别赋值给a,b,c,d

解构赋值结合剩余参数

let a,b,rest;
[a,b,...rest] = [1,2,3,4,5,6];
console.log(rest);
//[3,4,5,6]

Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)的更多相关文章

  1. ES7: 展开语法spread syntax:

    第一次遇到: payload = {...payload, manufacturer: state.manufacturers.filter(x => x._id === payload.man ...

  2. ES6---扩展运算符和rest‘...’(三点运算符),在数组、函数、set/map等中的应用

    ES6新增的三点运算符,是由三个点表示,在数组中扮演着重要的角色,可以对数组进行合并与分解.可以对set等数据结构进行转换.可以对函数参数进行简化表示,接下来,我们一起揭开其神秘面纱… ●三点—res ...

  3. JavaScript展开操作符(Spread operator)介绍

    本文介绍JavaScript的展开操作符(Spread operator)....本文适合ES6初学者. 你可以通过展开操作符(Spread operator)...扩展一个数组对象和字符串.展开运算 ...

  4. ES6 扩展运算符 三点(...)

    含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[, , ]) // 1 2 3 conso ...

  5. es6 学习小记 扩展运算符 三个点(...)

    参考: es6 扩展运算符 三个点(...) 经常回顾,方能真正掌握. 一.含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. ...

  6. ES6扩展运算符的几个小技巧

    es6扩展运算符,也就是...  ,作用是将一个数组转为用逗号分隔的参数序列. 那么问题来了,我们为啥要用这么奇怪的东东涅,当然因为它能大大提高我们的开发效率.所以,可别小看这三个点. 1.复制数组( ...

  7. ES6系列_4之扩展运算符和rest运算符

    运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁. 运算符有两种:对象扩展运算符与rest运算符. 1.对象扩展( spread)运算符(...) (1)解决参数个数 ...

  8. ES6(模板字符串,三点运算符,Symbol,iterator接口)

    模板字符串 作用:简化字符串的拼接 模板字符串必须用``包含 变化的部分使用${xxx}包含 对象的简写方式 同名的属性可以省略不写 可以省略函数的function 箭头函数 箭头函数的特点 箭头函数 ...

  9. ES6...扩展运算符(数组或类数组对象)

    数组和类数组对象定义 数组:[] 类数组对象:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为他是类数组对象. 数组使用 let foo_arr = [ ...

随机推荐

  1. 用c#自己实现一个简单的JSON解析器

    一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更 ...

  2. springboot+redis做事件过期通知业务

    springboot+redis做事件过期通知 博主也是初次体验,不足之处多多指教 我的业务场景 系统管理员要给维护员分配巡查路口设施的工作,由于路口比较多,管理员不知道哪些路口已经被分配了,况且过了 ...

  3. SpringSecurity+Oauth2+Jwt实现toekn认证和刷新token

    简单描述:最近在处理鉴权这一块的东西,需求就是用户登录需要获取token,然后携带token访问接口,token认证成功接口才能返回正确的数据,如果访问接口时候token过期,就采用刷新token刷新 ...

  4. Spark 3.0 新特性 之 自适应查询与分区动态裁剪

    Spark憋了一年半的大招后,发布了3.0版本,新特性主要与Spark SQL和Python相关.这也恰恰说明了大数据方向的两大核心:BI与AI.下面是本次发布的主要特性,包括性能.API.生态升级. ...

  5. ken桑带你读源码 之scrapy pipelines\images.py

    大家先看看 http://www.cnblogs.com/attitudeY/p/7078559.html 下面我做一些补充   最新版本1.1 已经支持 下载路径保存到  item   48行    ...

  6. nginx静态资源防盗链

    含义: 用于阻止 Referer 头字段为无效值的请求访问站点.需记住的是,使用适当的 Referer 字段值来伪造请求非常容易,因此本模块的预期目的不是要彻底阻止此类请求,而是阻止常规浏览器发送的大 ...

  7. PHP getNamespaces() 函数

    实例 返回 XML 文档中使用的命名空间: <?php$xml=<<<XML高佣联盟 www.cgewang.com<?xml version="1.0&quo ...

  8. ABC 162 F Select Half dp 贪心

    LINK:Select Half 考试的时候调了一个小时给调自闭了 原来是dp的姿势不太对. 首先 容易发现 奇数最多空2个位置 偶数最多空1一个位置 然后 设f[i][j][k]表示第i个数选了没有 ...

  9. QDC day4

    图论. 强连通图 与 弱连通图 . 最短路 .dij 不支持负权.显然 值得一提的是利用斐波那契堆m+nlogn . 一张 边权都是2的整数次幂 考虑 一下直接 结构体维护这个2的整次幂数组但比大小 ...

  10. luogu P3920 [WC2014]紫荆花之恋

    LINK:紫荆花之恋 每次动态加入一个节点 统计 有多少个节点和当前节点的距离小于他们的权值和. 显然我们不能n^2暴力. 考虑一个简化版的问题 树已经给出 每次求某个节点和其他节点的贡献. 不难想到 ...