本文对变量的解构赋值(destructing)和展开运算符(spread operator …)做个简单的介绍。
本文首发在前端开发说
变量的解构赋值
以下例子通过Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3216.0 Safari/537.36
测试。
数组赋值
1 | let [a, b] = [1, 2]; |
对象赋值
1 | // 用于提取数据 |
函数参数
1 | // 默认值设置 |
对象展开运算符
扩展运算符(spread operator …)将一个数组、类数组、字符串转为用逗号分隔的序列。
最早是在Vuex文档看到
1 | computed: { |
得知是对象展开运算符。查阅资料发现属于ES6变量的解构赋值的内容。说来也惭愧《ES6 标准入门》第1版,第2版都看过,当初看的不深入,很多知识点都有漏洞。而今天在封装Vue组件
的时候,如下代码看的甚是变扭,ES6模块和CommonJS规范糅杂在一起。
1 | import components from './components'; |
于是做了如下调整
1 | export default { |
Vuex的文档中有介绍对象展开运算符(现处于 ECMASCript 提案 stage-3 阶段)。
1 | The TC39 categorizes proposals into the following stages: |
大致翻译如下:1
2
3
4
5
6
7
8
9
10
11
12
13Stage 0 - Strawman(展示阶段)
Stage 1 - Proposal(征求意见阶段)
Stage 2 - Draft(草案阶段)
Stage 3 - Candidate(候选人阶段)
Stage 4 - Finished(定案阶段)
进入 2 阶段,基本上都已经确定要发布了。
在 2015 年进入 stage4 的叫做 es2015
在 2016 年进入 stage4 的叫做 es2016
以此类推
作者:Yugo
链接:http://www.jianshu.com/p/41d3f7768095
对象合并
1 | const a = [1, 2]; |
函数传参
1 | function fun(...args) { |
扩展阅读
- 展开运算符的 6 种绝妙用法
- http://blog.csdn.net/qq_30100043/article/details/53424750
- ES6之Spread Operater拷贝对象
- es6 扩展运算符 三个点(…)
- 第四章 扩展的对象功能
总结
知识点的理解结合具体的项目代码,能快速掌握。不清楚不懂的查漏补缺,just-do-it,对!就是立刻做,这是你知识体系的短板,深挖进去发现会收获很多。
参考
- http://es6.ruanyifeng.com/#docs/destructuring
- https://github.com/thejameskyle/babel-handbook/blob/master/translations/zh-Hans/user-handbook.md
- https://excaliburhan.com/post/babel-preset-and-plugins.html
- https://segmentfault.com/a/1190000010468759
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment