ES7: 展开语法spread syntax:
第一次遇到:
payload = {...payload, manufacturer: state.manufacturers.filter(x => x._id === payload.manufacturer)[0]}
解释,类似Object.assign(target, [source...]), 把payload对象和manufacturer key/value组合起来,成为一个新对象。⚠️只是浅层拷贝(1层)
参看:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax
展开语法(Spread syntax)
可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。(译者注: 字面量一般指 [1, 2, 3]
或者 {name: "mdn"}
这种简洁的构造方式)
语法:
myFunction(...iterableObj); [...iterableObj, '4', ...'hello', 6]; let objClone = { ...obj };
在函数调用时使用展开语法
一般使用: func.apply(thisArg, [argsArray])
函数。
//声明一个函数
function myFunction(x, y, z) {}
//声明并赋值一个变量args
var args = [0, 1, 2]; myFunction.apply(null. args);
有了spread syntax,则可以简单写:
myFunction(...args);
构造字面量数组时使用展开语法
apply的作用就是为原来的数组a附加一个新的数组b,并且这个新的数组b中的每个元素是作为单独的元素添加到a中的:
var array = ['a', 'b'];
var elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // 原来的array的值变为: ["a", "b", 0, 1, 2]
Array.concat函数是产生一个新的数组。和使用spread syntax进行数组连接的作用一样。
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
// 将 arr2 中的元素插入到 arr1 的开头
Array.prototype.unshift.apply(arr1, arr2) //等同于
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1 = [...arr2, ...arr1]; // arr1 现在为 [3, 4, 5, 0, 1, 2]
构造字面量对象时使用展开语法
var obj1 = { foo: 'bar', x: 42 }; var b = {...obj1} // { foo: 'bar', x: 42 }, ⚠️b和obj1各自指向不同的内存空间。 var c = obj1 // c和obj1是指向相同的内存空间。
效果类似Object.assign()。(但有区别,具体见
ES7: 展开语法spread syntax:的更多相关文章
- Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)
0.看文档呀 关于拓展运算符更详细的解释见 > MDN展开语法 关于剩余参数更详细的解释见 >MDN剩余参数 关于解构赋值更详细的解释见 >MDN解构赋值 直接看上面的文档更好 1. ...
- Spread Syntax
[Spread Syntax] The spread syntax allows an expression to be expanded in places where multiple argum ...
- 什么是流利语法Fluent Syntax
出处:http://blog.csdn.net/u010019717 author:孙广东 时间:2015.3.18 23:00 编程新概念:什么是流利语法fluent synta ...
- JavaScript展开操作符(Spread operator)介绍
本文介绍JavaScript的展开操作符(Spread operator)....本文适合ES6初学者. 你可以通过展开操作符(Spread operator)...扩展一个数组对象和字符串.展开运算 ...
- shell脚本启动语法错误syntax error near unexpected token '{
执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型 ...
- ES7/ES8 语法学习
作为一个前端开发者,感觉需要学习的东西贼多,ES6刚学会用没多久,又得学习了解ES7/ES8新增的东西,这里是看了大佬们文章的一点点总结以及摘抄的内容,给自己当笔记使用 内容转载自:https://w ...
- [ES6系列-06]展开操作符 Spread Operator 就像解压到这里
[原创]码路工人 Coder-Power 大家好,这里是码路工人有力量,我是码路工人,你们是力量. github-pages 博客园cnblogs 在前面的文章中,介绍了...在获取剩余参数中的作用. ...
- ecma 2018, javascript spread syntax behaves like Object.assign
as the subject. It is only supported in Chrome version 60+, so, first check the version, or just use ...
- Vben Admin 源码学习:状态管理-错误日志
0x00 前言 本文将对 Vue-Vben-Admin 的状态管理实现源码进行分析解读,耐心读完,相信您一定会有所收获! 0x01 errorLog.ts 错误日志 文件 src\store\modu ...
随机推荐
- python --- 09 初始函数 参数
函数 1.函数: 对代码块和功能的封装和定义 2.格式及语法 def 函数名() # 定义 函数体 函数名() # 调用 3. return ret ...
- Flask学习【第8篇】:flask-session组件
简介 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如 redis:保存数据 ...
- git用法-打补丁【转】
本文转载自:https://www.cnblogs.com/yandufeng/p/5580765.html 1. git cherry-pick 作用:从一个branch上选择一个commit,添加 ...
- ibus-libpinyin 无法选择除第一个外的候选词
其实不只一个人遇到这问题 https://github.com/libpinyin/ibus-libpinyin/issues/127 临时可用的解决办法是: 清理libpinyin的cache目录相 ...
- tp框架中的一些疑点知识-6
vim自带一个目录浏览器,使用命令:E就可以调出来,实际上就是浏览器的名字就是"网络读写"netrw vim也自带了 补全功能, 启动键是 "ctrl_N" 或 ...
- C#Winform工具箱简介
BindingSource:指定支持事务处理初始化Button:[按钮]用户单击它时引发事件 CheckBox:[复选框]允许用户选择或清除关联选项 CheckedListBox:[复选列表框]显示一 ...
- 使用Python制作第一个爬虫程序
用到的开发环境 IDE:pycharm python version :2.7 掌握的知识: Pycharm 还能更改Python的版本 代码如下:(重点就是 正则表达式的学习) # !/u ...
- 比原链设计思考: 扩展性UTXO模型
用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型 ...
- 【C#】异步的用法
1. C#5.0 加入了async, await关键字. async是在声明异步方法时使用的修饰符, 声明放在返回值之前即可,await表达式则负责消费异步操作, 不能出现在catch或finally ...
- docker 命令2
docker build -t dvm.adsplatformproxy:v1.0.0 . #build images docker run -e WWNamespace=dev -e ZKServe ...