ECMAScript 6 入门(阮一峰)个人总结
1.let和const命令
let注意点:
a. 使用let
命令声明变量之前,该变量都是不可用的。(称为“暂时性死区”)
b. let
、const
语句不出现变量提升
c. let
不允许在相同作用域内,重复声明同一个变量。
d. const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
ES6声明变量的6种方法:
Es5中:var 命令和function命令。Es6 let和const命令,还有import命令和class命令。
顶层对象,在浏览器环境指的是window
对象,在 Node 指的是global
对象。
规定:var
命令和function
命令声明的全局变量,依旧是顶层对象的属性,let
命令、const
命令、class
命令声明的全局变量,不属于顶层对象的属性。
2.变量的解构赋值
语法:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
3.字符串的扩展及新增方法
1. for...of 遍历字符串
2. JSON.stringify()
的问题在于,它可能返回0xD800
到0xDFFF
之间的单个码点。
3. 模板字符串
模板字符串中嵌入变量,需要将变量名写在${}
之中。
4.实例方法1:
实例方法2:
实例方法3:
实例方法4:
4.数值的扩展
如果参数类型不是NaN
,Number.isNaN
一律返回false
。
Math对象的扩展等等:
5.函数的扩展
1.函数参数指定默认值
这是因为length
属性的含义是,该函数预期传入的参数个数。某个参数指定默认值以后,预期传入的参数个数就不包括这个参数了。同理,后文的 rest 参数也不会计入length
属性。
2.rest参数
注意,rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
函数的length
属性,不包括 rest 参数。
name属性:
箭头函数:
6.数组的扩展
1.扩展运算符
扩展运算符的应用:
1.复制数组
2.合并数组
3.与解构赋值结合
注意:如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。
4.字符串
5.Array.from()
Array.from
方法用于将:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)转为真正的数组。
6.对象的扩展及新增方法
1.属性的简洁表示法
2.关键字super
,指向当前对象的原型对象。this
关键字总是指向函数所在的当前对象。
7.Symbol
ES6 引入了一种新的原始数据类型Symbol
,表示独一无二的值。
8.Set 和 Map 数据结构
对象只接受字符串作为键名,为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
8.Proxy
Proxy 用于修改某些操作的默认行为,
9.Reflect
Reflect
对象与Proxy
对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect
对象的设计目的有这样几个。
(1) 将Object
对象的一些明显属于语言内部的方法(比如Object.defineProperty
),放到Reflect
对象上。也就是说,从Reflect
对象上可以拿到语言内部的方法。(2) 修改某些Object
方法的返回结果,让其变得更合理。(3) 让Object
操作都变成函数行为。(4)Reflect
对象的方法与Proxy
对象的方法一一对应,只要是Proxy
对象的方法,就能在Reflect
对象上找到对应的方法。这就让Proxy
对象可以方便地调用对应的Reflect
方法,完成默认行为,作为修改行为的基础。也就是说,不管Proxy
怎么修改默认行为,你总可以在Reflect
上获取默认行为。
10.Promise
所谓Promise
,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。有了Promise
对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
1.基本用法:
2.Promise.prototype.then()
then
方法是定义在原型对象Promise.prototype
上的。它的作用是为 Promise 实例添加状态改变时的回调函数。then
方法返回的是一个新的Promise
实例(注意,不是原来那个Promise
实例)。
3.Promise.prototype.catch()
Promise.prototype.catch
方法是.then(null, rejection)
或.then(undefined, rejection)
的别名,用于指定发生错误时的回调函数。另外,then
方法指定的回调函数,如果运行中抛出错误,也会被catch
方法捕获。
4.Promise.prototype.finally()
finally
方法的回调函数不接受任何参数。finally
方法里面的操作,应该是与状态无关的,不依赖于 Promise 的执行结果。
5.Promise.all()
(1)只有p1
、p2
、p3
的状态都变成fulfilled
,p
的状态才会变成fulfilled
(2)只要p1
、p2
、p3
之中有一个被rejected
,p
的状态就变成rejected
只要p1
、p2
、p3
之中有一个实例率先改变状态,p
的状态就跟着改变。
6.Promise.resolve()
有时需要将现有对象转为 Promise 对象,Promise.resolve
方法就起到这个作用。
7.Promise.try()
实际开发中,经常遇到一种情况:不知道或者不想区分,函数f
是同步函数还是异步操作,但是想用 Promise 来处理它。
11.Iterator 和 for...of循环
遍历器(Iterator)它是一种接口,目的:为各种不同的数据结构提供统一的访问机制。
Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of
循环,Iterator 接口主要供for...of
消费。
Iterator 协议里面next()
方法只能包含同步操作。
当使用for...of
循环遍历某种数据结构时,该循环会自动去寻找 Iterator 接口。
一种数据结构只要部署了 Iterator 接口,我们就称这种数据结构是“可遍历的”(iterable)。
ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator
属性,或者说,一个数据结构只要具有Symbol.iterator
属性,就可以认为是“可遍历的”(iterable)。
for...of
循环,作为遍历所有数据结构的统一的方法。
for...of
循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments
对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
for...of
循环可以代替数组实例的forEach
方法。
JavaScript 原有的for...in
循环,只能获得对象的键名,不能直接获取键值。ES6 提供for...of
循环,允许遍历获得键值。
12.Generator函数
是一个普通的函数,理解为 一个状态机,封装了多个内部状态。写法如下:
然后,Generator 函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象。下一步,必须调用遍历器对象的next
方法,使得指针移向下一个状态。
由于 Generator 函数返回的遍历器对象,只有调用next
方法才会遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数。yield
表达式就是暂停标志。
另外需要注意,yield
表达式只能用在 Generator 函数里面,用在其他地方都会报错。
Generator 函数也不能跟new
命令一起用,会报错。
Generator 函数的一个重要实际意义就是用来处理异步操作,改写回调函数。
13.async函数
async 函数是什么?一句话,它就是 Generator 函数的语法糖。
async
函数对 Generator 函数的改进,体现在以下四点。
14.class的基本用法及继承
class作为对象的模板,让对象原型写法更清晰。
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。
ECMAScript 6 入门(阮一峰)个人总结相关推荐
- react 入门 阮一峰
http://www.ruanyifeng.com/blog/2015/03/react.html
- 阮一峰 《ECMAScript 6 入门》:let 和 const 命令
以下内容全文出自 阮一峰的书: <ECMAScript 6 入门> 电子版地址:ES 6标准入门(第3版) let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于v ...
- [转]阮一峰:蒙特卡罗方法入门
ametor 阮一峰:蒙特卡罗方法入门 发表于2016/4/24 10:26:54 84人阅读 分类: 算法 作者: 阮一峰 日期: 2015年7月27日 本文通过五个例子,介绍蒙特卡罗方法(Mon ...
- react入门(1)之阮一峰react教程
阮一峰老师的github地址:React Demos React 入门实例教程 1.HTML模板 <!DOCTYPE html> <html><head>// re ...
- http 阮一峰_互联网协议入门(二)
上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想. 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的. ================== ...
- React 入门实例 参考阮一峰博客
React 入门实例 参考阮一峰博客 http://www.ruanyifeng.com/blog/2015/03/react.html React 可以在浏览器运行,也可以在服务器运行.服务器的用法 ...
- 阮一峰--汇编语言入门
阮一峰:http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html 汇编指令入门:https://blog.csdn.ne ...
- 阮一峰ES6入门读书笔记(十六):Moudle
阮一峰ES6入门读书笔记(十六):Moudle 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种.前者用于服务器,后者用于浏览器.ES6 在语言标准的层面上 ...
- 阮一峰ES6入门读书笔记(七):运算符的拓展
阮一峰ES6入门读书笔记(七):运算符的拓展 1. 指数运算符 ES6新增了一个指数运算符(**). 2 ** 2 // 4 2 ** 3 // 8 这个运算符的一个特点是右结合,而不是常见的左结合. ...
- js -- ES6(一)-- 简介(根据阮一峰ES6标准入门整理)
目前正在学习ES6,根据阮一峰的ES6入门2,学到哪更新到哪里,都是基本的知识,复杂的目前还不会,涉及的代码都是亲自运行过的,若发现错误请指正. ES6 提供了许多新特性,但是并不是所有的浏览器都能够 ...
最新文章
- ecs 对比 本地服务器_ECS训练营Day03_SLB负载均衡实践 - 魔笔钨丝浣
- 【解决方案】MTU现场能源发电机,点亮孤岛的文明之光
- 【机器学习】机器学习从零到掌握之十 -- 教你使用Python实现决策树
- java 并发协作控制
- 8 一点就消失_消失的莉莉安(25)
- 网络打印服务器的作用,内置网络打印服务器有什么用?
- java创建response对象_javaweb入门-----request与response的作用
- 人工智能方向改变,图灵测试是否已过时?
- Web网站模板-响应式旅游旅行团酒店预订展示网站模板(HTML+CSS+JavaScript前端大作业)
- java关于方法覆盖的叙述_以下关于方法覆盖的叙述中正确的是( )
- mac安装win7之后鼠标失灵_mac安装win7鼠标失灵怎么办
- Vue之echarts圆饼图详解
- 用牛顿法求算术平方根python
- 【考研数学】微分中值定理计算极限专题
- 2022-2028年全球与中国短波红外(SWIR)行业深度分析
- 职业学校的老师教计算机,职业院校计算机教学方式方法分析
- 2.企业发放的奖金根据利润提成。
- HeapCreate()
- NIB 和 XIB 的区别
- C语言的for循环转verilog,Verilog for 循环语句
热门文章
- Linux下查看CPU信息和GPU显卡信息
- DB2错误代码大全(含实际开发中遇到的最多的问题)
- Android及IOS微信5,Android版微信5.0今日正式发布 与iOS版略不同
- android 读取wps_Android 实现 调用 WPS Office手机版接口
- 对于模块化的一些见解
- 【印刷行业】RICOH TH5241喷头(G5i)
- Spark RDD使用详解--RDD原理
- ros修改map_server地图发布的map关联的坐标系frame_id(多机器人联合建图用)
- ROS Error: [rospack] Error: package ‘map_server‘ not found
- HazelEngine 学习记录 - ImGui Docking