Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)
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)的更多相关文章
- ES7: 展开语法spread syntax:
第一次遇到: payload = {...payload, manufacturer: state.manufacturers.filter(x => x._id === payload.man ...
- ES6---扩展运算符和rest‘...’(三点运算符),在数组、函数、set/map等中的应用
ES6新增的三点运算符,是由三个点表示,在数组中扮演着重要的角色,可以对数组进行合并与分解.可以对set等数据结构进行转换.可以对函数参数进行简化表示,接下来,我们一起揭开其神秘面纱… ●三点—res ...
- JavaScript展开操作符(Spread operator)介绍
本文介绍JavaScript的展开操作符(Spread operator)....本文适合ES6初学者. 你可以通过展开操作符(Spread operator)...扩展一个数组对象和字符串.展开运算 ...
- ES6 扩展运算符 三点(...)
含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[, , ]) // 1 2 3 conso ...
- es6 学习小记 扩展运算符 三个点(...)
参考: es6 扩展运算符 三个点(...) 经常回顾,方能真正掌握. 一.含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. ...
- ES6扩展运算符的几个小技巧
es6扩展运算符,也就是... ,作用是将一个数组转为用逗号分隔的参数序列. 那么问题来了,我们为啥要用这么奇怪的东东涅,当然因为它能大大提高我们的开发效率.所以,可别小看这三个点. 1.复制数组( ...
- ES6系列_4之扩展运算符和rest运算符
运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁. 运算符有两种:对象扩展运算符与rest运算符. 1.对象扩展( spread)运算符(...) (1)解决参数个数 ...
- ES6(模板字符串,三点运算符,Symbol,iterator接口)
模板字符串 作用:简化字符串的拼接 模板字符串必须用``包含 变化的部分使用${xxx}包含 对象的简写方式 同名的属性可以省略不写 可以省略函数的function 箭头函数 箭头函数的特点 箭头函数 ...
- ES6...扩展运算符(数组或类数组对象)
数组和类数组对象定义 数组:[] 类数组对象:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为他是类数组对象. 数组使用 let foo_arr = [ ...
随机推荐
- node name配置错误,导致grid日志在报警
[root@aipdb ContentsXML]# cat inventory.xml <?xml version="1.0" standalone="yes&qu ...
- 尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...
最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了.可能看到这个名字,很多读者会有点陌生.但是,只要给大家看一下这两个依赖,你就知道了! <depende ...
- 在 vue 中使用 WebSocket
<template> <div class="hello"> <h1>{{ msg }}</h1> <h1>{{ res ...
- PHP常见的十个安全问题
相对于其他几种语言来说, PHP 在 web 建站方面有更大的优势,即使是新手,也能很容易搭建一个网站出来.但这种优势也容易带来一些负面影响,因为很多的 PHP 教程没有涉及到安全方面的知识. 此帖子 ...
- JS闭包应用场景之函数回调(含函数的调用个人理解)
首先我们来绑定一个函数给click事件,这个很好理解,就是创建一个匿名函数作为回调绑定给click事件,如下: 但如果我们想声明一个函数作为回调来绑定多个元素呢,例如下面(注意:绑定事件后不用加括号, ...
- Django Models随机获取指定数量数据方法
方法一:新增models的Manager方法 下面就直接发代码了 class RandomManager(models.Manager): def get_queryset(self): return ...
- centos7.5安装gdal编译环境
安装准备的环境: 名称 类型与版本 软件连接 服务器 linux-centos7.5 jdk 1.8.0_25 ant 1.9.14 http://mirror.bit.edu.cn/apac ...
- Redis简介与部署
一.简介 Redis是什么?redis是一款基于BSD协议,开源的非关系型数据库(nosql数据库),作者是意大利开发者Salvatore Sanfilippo在2009年发布,使用C语言编写:red ...
- JavaFX让UI更美观-CSS样式
相对于Swing来说,JavaFX在UI上改善了很多,不仅可以通过FXML来排版布局界面,同时也可以通过CSS样式表来美化UI. 其实在开发JavaFX应用的时候,可以将FXML看做是HTML,这样跟 ...
- 交通网最短路径长 dp c++
// // Created by Arc on 2020/4/26. // /* * 城市交通线路,单向通行,道路之间可能有不通,每条连同的路之间都有相应的费用 * 求从起点到终点的最小费用 * * ...