【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages

博客园cnblogs


在前面的文章中,介绍了...在获取剩余参数中的作用。它的主要任务还是作为展开运算符。


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 就像解压到这里的更多相关文章

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

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

  2. Mysql系列(一)—— 基于5.7.22 解压版下载、安装、配置和卸载

    1.下载 从官网中直接获取自己想要的版本: MySQL Community Server 5.7.22 2.解压 将下载到的文件解压缩到自己喜欢的位置. 与mysql 5.6不同的是5.7版本中没有d ...

  3. JavaScript剩余操作符Rest Operator

    本文适合JavaScript初学者阅读 剩余操作符 之前这篇文章JavaScript展开操作符(Spread operator)介绍讲解过展开操作符.剩余操作符和展开操作符的表示方式一样,都是三个点 ...

  4. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  5. 《理解 ES6》阅读整理:函数(Functions)(三)Function Constructor & Spread Operator

    增强的Function构造函数(Increased Capabilities of the Function Constructor) 在Javascript中Function构造函数可以让你创建一个 ...

  6. [ES6] 13. Using the ES6 spread operator ...

    The spread operator (...) allows you to "explode" an array into its individual elements. S ...

  7. [ES6系列-03]ES6中关于参数相关特性详解(参数默认值与参数解构赋值与剩余参数)

    [原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 今天总结一下 ES6 中跟参数相关的内容. 欢迎补充斧正.留言交流. 让我们互相学习一起进步. 1. ES6 参数默认值( ...

  8. [js高手之路] es6系列教程 - 对象功能扩展详解

    第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...

  9. [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

    接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...

随机推荐

  1. C语言编程入门题目--No.13

    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身.例如:153是一个"水仙花数",因为153= ...

  2. 数学--数论--HDU 2197 本原串 (推规律)

    由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...

  3. JavaSpring中级联查询

    一对一级联查询映射文件PersonMapper.xml代码: <?xml version="1.0" encoding="UTF-8"?> < ...

  4. Three Blocks Palindrome (easy version)[暴力-预处理]

    给定一个数组,找出最长的子序列,满足 a,a,..a,b,b,..b,a,a,..a 前面的a和后面的a都要是x个,中间的b是y个. 其中,x>=0且y>=0. \(\color{Red} ...

  5. 记忆化搜索 E - Loppinha, the boy who likes sopinha Gym - 101875E

    E - Loppinha, the boy who likes sopinha Gym - 101875E 这个题目是一个dp,这个应该很容易看出来,但是对于状态的定义其实有点难去想, 看了题解dp[ ...

  6. word 小技巧 方框中 打 对勾

    方框中  打 对勾 称为 复选框 控件,单击鼠标,在两种符号中切换. 设置步骤 1. 将隐藏的"开发工具"选项卡,显示出来 2. 在所需位置,插入复选框 3. 在属性中,设置复选框 ...

  7. 002_python的in,while else,格式化输出,逻辑运算符,int与bool转换,编码

    数据 1.什么是数据? x=10,10是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字 字符串 列表 元组 字典 集合 ...

  8. Coursera课程笔记----计算导论与C语言基础----Week 7

    C语言中的数据成分(Week7) 内存 把内存想象成长带,带子上有许多方格,每个方格有8位(8bit) 2^10 = 1024 1B = 8 b 1KB = 1024Byte MB.GB.TB.PB- ...

  9. 闲来无事做个C#小项目——1

    2020-05-10 12:25:47 项目背景就是最近和一些朋友在玩一个游戏,游戏中有一个囤货的东西,就是买进卖出的,然后为了方便计算,所以就先写一个简单的计算器用来算账, 这是界面图(最初形态,没 ...

  10. 超简单笔记本改造nas--一个萌新的摸爬滚打

    最近好久没更新,你们有没有想我啊(手动滑稽)咳咳,言归正传,如同标题,最近闲来无事,打算利用家里的闲置笔记本电脑搭建一个nas.**注意:本文不涉及群晖以及相关专业NAS服务供应商!!!**nas分两 ...