ES6学习笔记(一)——扩展运算符和解构赋值
前言
随着前端工程化的快速推进,在项目中使用ES6甚至更高的ES7等最近特性早已不是什么新鲜事。之前还觉得既然浏览器支持有限,那了解一下能看懂就好,然而仅仅了解还是不够的,现在放眼望去,那些成熟框架的代码示例都已经开始使用ES6编写了,昨天瞥了一眼vue的源码,已经全部使用ES6编写了。随着开发的进行,发现仅仅了解一下已经不能应付一些日常开发了,因为一些新的特性看起来有点吃力了,所以决定重新学习一下日常开发中见得比较多的ES6特性,争取与实际用例相结合,不仅要认识还要会用,以后多多用起来!当然本文中的ES6就是泛指哈,借用阮一峰老师的定义:
ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。本书中提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”。
扩展运算符
rest参数
在讲扩展运算符之前得讲一下rest参数,rest参数在我理解来看就是用'...变量名'的形式替代了函数参数中的arguments对象,大概用法如下:
function testFn (fist, ...rest) {
console.log(fist); //1
console.log(rest); //[2,3,4,5]
}
testFn(1,2,3,4,5);
当然如果在参数中只传入rest参数的话它代表的就是将arguments对象转为数组之后的一个数组,也就是一个包含了所有参数的数组:
function test2 (...rest) {
console.log(rest);
}
test2(1,2,3); // [1,2,3]
这个对于处理一些不知道参数数量的情况是很方便的,因为一般来说我们也要将argum对象转为数组才方便处理的,下面就是两种不同的写法:
// arguments写法
function add1(){
var sum = 0;
Array.prototype.slice.apply(arguments).forEach( function(item){
sum += item;
})
console.log(sum)
}
add1(1,2,3); //6
// rest参数写法
function add2(...valus) {
let sum = 0;
valus.forEach( value => {
sum += value
})
console.log(sum)
}
add2(1,2,3); //6
扩展运算符
讲完了rest参数,再讲扩展运算符就可以把它理解为rest参数的逆运算,将一个数组转为用逗号分隔的参数序列:
console.log(...[1,2]); //1,2
console.log(8, ...[1,2], 9); //8,1,2,9
再将rest参数和扩展运算符结合起来就是这样的:
function test3 (...rest) {
console.log(rest)
}
var nums = [1,2,7];
test3(...nums); // [1,2,7]
应用:
- 替代组中的apply方法
var arr4 = [1,2,3];
function test4 (a, b, c) {
console.log(a)
}
// ES5写法
test4.apply(null, arr4);
// ES6写法
test4(...arr4);
- 合并数组
var arr1_ = [1];
var arr2_ = [2,3];
var arr3_ = [4,5];
// ES5
var arr4_ = arr1_.concat(arr2_, arr3_);
console.log(arr4_); //[1, 2, 3, 4, 5]
// ES6
var arr5_ = [...arr1_, ...arr2_, ...arr3_]
console.log(arr5_); //[1, 2, 3, 4, 5]
rest运算符和spread运算符的区别
对于三个点号,三点放在形参或者等号左边为rest运算符; 放在实参或者等号右边为spread运算符,或者说,放在被赋值一方为rest运算符,放在赋值一方为扩展运算符。
解构赋值
解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值
- 数组的解构赋值
let [a, b, c] = [1, 2, 3];
console.log(a); //1
- 对象的解构赋值
let { foo, bar } = { foo: "aaa", bar: "bbb" };
console.log(foo); //"aaa"
- 字符串的解构赋值
const [a, b, c, d, e] = 'hello';
a // "h"
- 数值和布尔值的解构赋值
- 函数参数的机构赋值
本文同步发表在我的个人博客:[https://wancheng7.github.io/post/59cf2dea.html)
参考文章
ES6学习笔记(一)——扩展运算符和解构赋值的更多相关文章
- ES6学习笔记之变量的解构赋值
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...
- ES6 学习笔记(二)解构赋值
一.数组的解构赋值 1.基本用法 ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,该操作即为解构 如: let [a,b,c]=[1,2,3]; console.log(a,b,c) ...
- ES6学习随笔--字符串模板、解构赋值、对象、循环、函数、Promise、Generrator
在线编译器:babel.github 在nongjs中使用 'use strict' let a = ; 运行node : node --harmony_destructuring xxx.js 代码 ...
- ES6学习笔记(2)----变量的解构和赋值
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 变量的解构和赋值 本质上:只要模式匹配,左边的变量就能被赋予右边对应的值 原则: 解构赋值的规则 ...
- ES6学习----let、const、解构赋值、新增字符串、模板字符串、Symbol类型、Proxy、Set
这篇es6的学习笔记来自于表哥 表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 ES6就是JS6,JS的第 ...
- ES6学习 第二章 变量的解构赋值
前言 该篇笔记是第二篇 变量的解构赋值. 这一章原文链接: 变量的解构赋值 解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构 ...
- ES6学习笔记(一):变量赋值和基本数据类型
let和const let和const不存在变量提升 变量一定要在声明后使用,否则报错. var a = []; for (var i = 0; i < 10; i++) { a[i] = fu ...
- es6学习2:变量的解构赋值
一:数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar ba ...
- ES6学习笔记(4)- 解构
一.解构的意义 二.对象解构 三.数组解构
随机推荐
- XPipe 解决什么问题
x-pipe/README.md at master · ctripcorp/x-pipe https://github.com/ctripcorp/x-pipe/blob/master/README ...
- JSON_EXTRACT查询mysql中的{}和 [{},{}中的值]
json_extract(a.tag, '$[*].tag_name.cn') as tag, json_extract(a.address,'$.en') as address_name, json ...
- talib 中文文档(十):Price Transform Functions 价格指标
Price Transform Functions AVGPRICE - Average Price 函数名:AVGPRICE 名称:平均价格函数 real = AVGPRICE(open, high ...
- 【译】3 ways to define a JavaScript class
本文真没啥难点,我就是为了检验我英语水平退化了没哈哈虽然我英语本来就渣翻译起来也像大白话.将原文看了一遍也码完翻译了一遍差不多一个小时,其中批注部分是自己的理解如有疏漏或误解还请指出感激不尽呐,比如J ...
- C#让应用程序只运行一个实例的几种方法
一 判断是否有相同的实例已经运行 1 根据“Mutex”判断是否有相同的实例在运行 /// <returns>已有实例运行返回true,否则为false</returns>pu ...
- 内置函数——format
说明: 1. 函数功能将一个数值进行格式化显示. 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化. >>> format(3.1 ...
- 协变返回类型---《C++必知必会》 条款 31
一般来说,一个重写的函数与被它重写的函数具有相同的返回类型. 然而,这个规则对于“协变返回类型(covariant return type)“的情形来说有所放松.也就是说,如果B是一个类类型,并且一 ...
- VS2010/MFC编程入门之前言
鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了.但是教程中讲的例子只是一个个简单的例程,并没有可视化窗口.鸡啄米在这套VS2010/M ...
- 20155310 2016-2017-2 《Java程序设计》第七周学习总结
20155310 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间与日期 认识时间与日期 •时间的度量 •GMT(格林威治标准时间):现在不是标 ...
- 两步实现在Git Bash中用Sublime打开文件
每次都要用鼠标点来点去才能用sublime打开文件!太不科学!今天来配置一下在Git bash中用sublime打开文件 方法 新建一个文件命名为你想要的命令,比如 subl(注意不能有后缀名),内容 ...