[ES6系列-06]展开操作符 Spread Operator 就像解压到这里
【原创】码路工人 Coder-Power
大家好,这里是码路工人有力量,我是码路工人,你们是力量。
在前面的文章中,介绍了...在获取剩余参数中的作用。它的主要任务还是作为展开运算符。
1.它能展开数组
数组是JavaScript中重要的类型,经常要用到数组操作,ECMAScript6中也添加了很多方便的方法,这里不讲数组对象新增的方法,只说说展开操作符常用的用途。好处自己体会。
1.1 浅拷贝一个数组
/* eg.0
* Array Copy Example
*/
//----------------------------------------
const src = ["The Rolling Stones", "U2", "Oasis"]
const des = [...src]
console.log(des)
// (3) ["The Rolling Stones", "U2", "Oasis"]
// 0: "The Rolling Stones"
// 1: "U2"
// 2: "Oasis"
// length: 3
// __proto__: Array(0)
//----------------------------------------
这直接省去了数组循环啊。
1.2 合并两个数组
合并的同时还可以另外添加其它元素
/* eg.1
* Array Merge Example
*/
//----------------------------------------
const src1 = ["Still loving you", "You and I"]
const src2 = ["Love of my life", "Life is too short"]
const des = ["Always some where", ...src1, ...src2]
console.log(des)
// (5) ["Always some where", "Still loving you", "You and I", "Love of my life", "Life is too short"]
// 0: "Always some where"
// 1: "Still loving you"
// 2: "You and I"
// 3: "Love of my life"
// 4: "Life is too short"
// length: 5
// __proto__: Array(0)
//----------------------------------------
2.它能展开JSON对象
/* eg.2
* Spead JSON Object Example
*/
//----------------------------------------
const person = {
name: "Coder Monkey",
age: 18
}
const student = {
...person,
major: "Computer Science"
}
console.log(student)
// {name: "Coder Monkey", age: 18, major: "Computer Science"}
// age: 18
// major: "Computer Science"
// name: "Coder Monkey"
// __proto__: Object
//----------------------------------------
3.它甚至还能展开一个普通的字符串
只不过展开后就不再是一个字符串了
3.1 字符串展开为Json对象
/* eg.3
*
*/
//----------------------------------------
let wxName = "Coder-Power"
console.log({ ...wxName })
// {0: "C", 1: "o", 2: "d", 3: "e", 4: "r", 5: "-", 6: "P", 7: "o", 8: "w", 9: "e", 10: "r"}
// 0: "C"
// 1: "o"
// 2: "d"
// 3: "e"
// 4: "r"
// 5: "-"
// 6: "P"
// 7: "o"
// 8: "w"
// 9: "e"
// 10: "r"
// __proto__: Object
//----------------------------------------
3.2 字符串展开为数组
/* eg.4
*
*/
//----------------------------------------
let wxName = "Coder-Power"
console.log([...wxName])
// (11) ["C", "o", "d", "e", "r", "-", "P", "o", "w", "e", "r"]
// 0: "C"
// 1: "o"
// 2: "d"
// 3: "e"
// 4: "r"
// 5: "-"
// 6: "P"
// 7: "o"
// 8: "w"
// 9: "e"
// 10: "r"
// length: 11
// __proto__: Array(0)
//----------------------------------------
4.脑洞时刻
4.1 数组能展开为对象吗?
/* eg.5
*
*/
//----------------------------------------
const bands = ["Beatles", "Scorpions"]
const obj = { ...bands }
// {0: "Beatles", 1: "Scorpions"}
// 0: "Beatles"
// 1: "Scorpions"
// __proto__: Object
//----------------------------------------
是不是觉得数组与对象不能交叉展开,竟然...没错,它可以!
惊不惊喜,意不意外?
(数组下标index作为了对象的键key。)
4.2 那如果从对象展开为数组呢?
当然也是可以的了吗?事实就是这么残酷,代码无情地抛出了异常。
/* eg.6
*
*/
//----------------------------------------
const objBands = { '0': 'Beatles', '1': 'Scorpions' }
const arrBands = [...objBands]
console.log(arrbands)
// VM180:2 Uncaught TypeError:
// object is not iterable (cannot read property Symbol(Symbol.iterator))
//----------------------------------------
最后,不能由对象或数组展开为字符串,不再例证了吧。
思考:都哪些是可以用
...展开的呢?
上面的示例中,数组可以展开,对象可以展开,甚至连字符串都可以。
根本原因是,它们都是可迭代的,也就是实现/继承了iterable。
5.一句话总结
自认为可以总结一句话,就能让大家理解好展开操作符...,
就是把它看作就地解压缩。
以上。
希望对你能有帮助,下期再见。
欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码

[ES6系列-06]展开操作符 Spread Operator 就像解压到这里的更多相关文章
- JavaScript展开操作符(Spread operator)介绍
本文介绍JavaScript的展开操作符(Spread operator)....本文适合ES6初学者. 你可以通过展开操作符(Spread operator)...扩展一个数组对象和字符串.展开运算 ...
- Mysql系列(一)—— 基于5.7.22 解压版下载、安装、配置和卸载
1.下载 从官网中直接获取自己想要的版本: MySQL Community Server 5.7.22 2.解压 将下载到的文件解压缩到自己喜欢的位置. 与mysql 5.6不同的是5.7版本中没有d ...
- JavaScript剩余操作符Rest Operator
本文适合JavaScript初学者阅读 剩余操作符 之前这篇文章JavaScript展开操作符(Spread operator)介绍讲解过展开操作符.剩余操作符和展开操作符的表示方式一样,都是三个点 ...
- ES6,ES2105核心功能一览,js新特性详解
ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...
- 《理解 ES6》阅读整理:函数(Functions)(三)Function Constructor & Spread Operator
增强的Function构造函数(Increased Capabilities of the Function Constructor) 在Javascript中Function构造函数可以让你创建一个 ...
- [ES6] 13. Using the ES6 spread operator ...
The spread operator (...) allows you to "explode" an array into its individual elements. S ...
- [ES6系列-03]ES6中关于参数相关特性详解(参数默认值与参数解构赋值与剩余参数)
[原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 今天总结一下 ES6 中跟参数相关的内容. 欢迎补充斧正.留言交流. 让我们互相学习一起进步. 1. ES6 参数默认值( ...
- [js高手之路] es6系列教程 - 对象功能扩展详解
第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...
- [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...
随机推荐
- 实战经验:CentOS 7.3安装完整开发环境
系统版本 CentOS 7.3(1611) 安装开发环境 1) 通过group安装 # yum groups mark install “Development Tools” # yum groups ...
- 网络流--最大流--Dinic模板矩阵版(当前弧优化+非当前弧优化)
//非当前弧优化版 #include <iostream> #include <cstdio> #include <math.h> #include <cst ...
- Haporxy
安装Haproxy: 下载 wget https://fossies.org/linux/misc/haproxy-1.8.3.tar.gz tar -zxf haproxy-.tar.g cd ha ...
- Spring Boot 整合 Dubbo和Zookeeper
Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建 ...
- tomcat8调优
a. tomcat的运行原理: 1. Tomcat是运行在JVM中的一个进程.它定义为[中间件],顾名思义,是一个在Java项目与JVM之间的中间容器. 2. Web项目的本质,是一大堆的资源文件和方 ...
- libevent(八)激活事件
激活事件添加流程 事件发生后,需要把对应的event加入到激活事件队列中. 整个流程如下: 对于定时器事件,在timeout_process过程中,会将事件从最小堆中删除. 激活事件处理流程 在eve ...
- pytest文档38-allure.setp添加测试用例步骤
前言 一般流程性的测试用例,写成自动化用例时,步骤较多写起来会比较长.在测试用例里面添加详细的步骤有助于更好的阅读,也方便报错后快速的定位到问题. 举个常见的测试场景用例:从登陆开始,到浏览商品添加购 ...
- C. The Big Race
\(给出数n,a,b\) \(在[1,n]区间内随机选数,选出的数被a,b除后同余的概率\) \(这题的精度问题真的是烦炸了~\) \(设最小公倍数lcm=a*b/gcd(a,b)\) \(所以在区间 ...
- dp 20190617
A. Alternative Thinking 这个标的是dp,但是我感觉就只能算思维题,不是特别难, 你仔细想想就知道,你先求出01这样子满足条件的个数,如果要进行改变,最多只可以增加两个,也可以增 ...
- SQL语言概况(4.1)
SQL语言概况(4.1) 目录 SQL语言概况(4.1) 4.1 SQL语言概况 4.1.1 历史及标准简介 4.1.2 SQL语言定义及特点 4.1.3 使用说明 参考资料: 数据库原理及设计(第3 ...