在最近进行的项目中,已经全面使用到ES6,这里对ES6进行整理总结。用得比较多的是带*的内容,这些语法、新增类型、模块调用等从代码量上、可读性上、操作上给项目带来了不少便利。
 

1、语法

1.1、命令[***]

        a、let:提供块级作用域;不存在变量提升; 暂时性死区;不允许重复声明。
        b、const:一旦声明,值不可变;其他同上2-4;仅当前模块可用,跨模块需如下定义:export const A = 1。
        c、全局变量:ES6中,var、function生命的全局变量依旧为全局对象的属性;但是let、const、class是声明的全局变量不属于全局对象属性。

1.2、变量的解构赋值[**]

        解构类型:数组解构[模式匹配、默认值、按次序匹配]、对象解构[按变量名取值、模式匹配]、字符串、函数。
        用途:交换变量、从函数返回多个值、函数参数定义、提取Json数据、函数参数默认值等。
        一句话总结:从复杂的结构中提取想要的数据。 

1.3、循环(Iterator、for...of)[**]

        Iterator:遍历器,它是一种接口,为不同的数据结构提供统一的访问机制。
        for...of:部署了Symbol.iterator属性的数据结构,就可以使用for...of进行遍历[ES6新增]。
        其中,数组、Set、Map,可以使用entries()、keys()、values()三个方法,调用后返回遍历器接口;其自身也存在遍历器接口。
 

2、数据变化

2.1、新增数据类型

        a、Symbol:
            概念:独一无二的值。
            方法:查找symbol:
                Symbol.for():创建新的symbol;先查找现有symbol是否存在,如果存在则使用现有的;
                Symbol():生成新的symbol;
                Symbol.keyFor():返回已登记的symbol类型值的key。
            应用:消除魔法字符等
        b、Set数据结构[***]:相当于无重复值的数组。[并集、交集、差集的实现简单]
              WeakSet数据结构:成员只能是对象;其中的对象为弱引用,即垃圾回收机制不考虑。所以,其对象无法引用,weakSet本身也无法遍历。     
        c、Map数据结构[***]:类似对象,其键值仅为字符串[字符串-值],Map结构的键值可以是任何类型[值-值];
            WeakMap:仅对象为键名;且键名所指对象不计入垃圾回收机制。(weap对象随时会被回收)
        d、Proxy[对象处理方法]:对目标对象架设“拦截”层,外界的访问需通过“拦截”层。且提供一种机制,对外界的访问进行过滤和改写。 
        e、Reflect[对象处理方法]:Object的优化对象。
        f、二进制数组:该接口的设计目的与WebGl有关,对动画性能有提升[未深入了解]  

2.2、数据类型的扩展

        a、字符串扩展:主要增加了Unicode的处理方法(双字节字符)
        b、正则的扩展:主要增加了修饰符 u[检测Unicode]和 y[相当于带^的g]
        c、数值的扩展:主要提供了一些特殊值的处理方法:浮点数差的处理;Math增加了高级方法
        d、数组的扩展[**]:提供了创建、填充、查找、遍历数组的方法
        e、函数的扩展[***]:提供了参数方法、箭头函数[固定this作用域]、尾调用优化策略等
        f、对象的扩展[***]:简写方法、属性名表达式、扩展运算符、属性操作的新方法:assign()、create()、defineProperty()[含ES5]
 

3、异步相关

3.1、Promise [all、race、then、catch等][***]

        特点:对象的状态不受外界影响;
                一旦状态改变就不会再变;
        优点:可以将异步操作,同步表达出来。
        与jquery promise的区别:
            (1)ES6 Promise是一个构造函数,jquery Promise为对象;
            (2)ES6在new Promise对象时,传入函数,在该函数内部设置resolve、reject[状态不受外界影响];
                    jquery Promise可以任意位置设置状态。
            (3)ES6 Promise的异步处理函数将进入事件循环的任务消息队列,优先级比一般的网络、延时异步更高,且该队列为microtask,将在同一事件循环中得到处理。

3.2、Generator[***]

        它是一个状态机、一个遍历器。
        通过next方法进行遍历,每次遍历返回一个状态对象{value:, done:boolean};通过状态对象done的状态决定遍历是否结束。且每次暂停位置由yield指令决定。亦可通过for...of进行遍历,返回done为true的value值,而非状态对象。
        通过Generator,可按需控制每个yield的执行时机。

3.3、co[**]

        其实质是Generator函数的自执行模块。由于Generator自身是一种同步机制,如果存在异步操作,其不会等待异步执行结束,所以无法完成真正的自执行。
        而co模块,可通过结合Promise实现Generator的自执行。所以使用co模块的前提条件是,Generator函数的yield命令后面只能是Thunk函数或Promise对象。
        应用:
            控制页面js执行流,协调ajax、图片资源加载等异步操作及页面渲染的时机。

3.4、async[ES7]

       其关键字: async、await, 类似co模块实现的Generator自执行机制,同步执行异步操作。
 

4、Class[***]

      特点:a、类似语法糖,让类的定义更清晰;
               b、其prototype不可枚举;
                c、继承:extends;
                d、使用getter、setter拦截其存取行为。
                

5、Module模块[***]

    设计思想尽量静态化,在编译时加载。
    优点:不需要使用UMD模式,服务器、浏览器都将支持。
    模块功能主要由:export[输出]和import[输入]命令构成~
    模块的继承:export * from ‘circle'
    加载的实质:commonJS模块是值得拷贝,而ES6是值的引用。ES6为动态引用,加载时不去运行js;而commonJS加载时运行。
    

ES6 笔记(二)- 总结的更多相关文章

  1. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  2. ES6笔记(1) -- 环境配置支持

    系列文章 -- ES6笔记系列 虽然ES6已经发布一年多了,但在各大浏览器之中的支持度还不是很理想,在这查看ES6新特性支持度 Chrome的最新版本浏览器大部分已经支持,在Node.js环境上支持度 ...

  3. ES6笔记(2)-- let的块级作用域

    系列文章 -- ES6笔记系列 一.函数级作用域 我们都知道,在ES6以前,JS只有函数级作用域,没有块级作用域这个概念 没有块级作用域,有利有弊,利于方便自由,弊于作用域内的变量容易被共享,例如这个 ...

  4. ES6笔记(3)-- 解构赋值

    系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...

  5. ES6笔记(7)-- Promise异步编程

    系列文章 -- ES6笔记系列 很久很久以前,在做Node.js聊天室,使用MongoDB数据服务的时候就遇到了多重回调嵌套导致代码混乱的问题. JS异步编程有利有弊,Promise的出现,改善了这一 ...

  6. ES6 笔记汇总

    ES6 笔记汇总 二.ES6基础-let和const命令 三.变量的解构赋值 四.字符串的拓展 五.正则表达式的拓展 ...将会持续更新,敬请期待

  7. ES6笔记(5)-- Generator生成器函数

    系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...

  8. ES6笔记系列

    ES6,即ECMAScript 6.0,ES6的第一个版本是在2015年发布的,所以又称作ECMAScript 2015 如今距ES6发布已经一年多的时间,这时候才去学,作为一个JSer,羞愧羞愧,还 ...

  9. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  10. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

随机推荐

  1. Facebook支撑万亿Post搜索背后的技术窥探

    转自http://www.csdn.net/article/2013-10-29/2817333-under-the-hood-building-posts-search 近日,Facebook为po ...

  2. MYC编译器源码之语法分析

    MyC编译器采用自顶向下的方法进行语法解析,这种语法解析方式,一般是从最左边的Token开始,然后自顶向下看哪一条语法规则可能包含这个Token,如果包含这个Token,则自左向右根据这条语法规则逐一 ...

  3. JS——图片预览功能

    <script type="text/javascript">    function DisplayImage(fileTag) {        document. ...

  4. redis 数据备份持久化方案

    本文链接:http://www.cnblogs.com/zhenghongxin/p/9050219.html 使用两种备份方案 备份方案选择RDB和AOF同时进行备份,必须打开AOF的持久化机制,除 ...

  5. bzoj2095: [Poi2010]Bridges(二分+混合图求欧拉回路)

    传送门 这篇题解讲的真吼->这里 首先我们可以二分一个答案,然后把所有权值小于这个答案的都加入图中 那么问题就转化为一张混合图(既有有向边又有无向边)中是否存在欧拉回路 首先 无向图存在欧拉回路 ...

  6. python中实现三目运算

    python中没有其他语言中的三元表达式,不过有类似的实现方法 如: a = 1 b =2 k = 3 if a>b else 4 上面的代码就是python中实现三目运算的一个小demo, 如 ...

  7. nginx配置跨域、gzip加速、代理详细讲解

    1.配置跨域 这个很简单,直接打开配置nginx.conf ,在http下配置下面三行代码:当然如果你是想某一个虚拟主机下跨域,那就在哪个server下面添加 add_header Access-Co ...

  8. 百度地图笔记_覆盖物(标注marker,折线polyline,多边形polygon)的点击弹窗和右键菜单

    利用绘制工具绘制点线面,并在执行绘制完成回调事件给相应覆盖物添加事件操作,提供标注的点击弹窗和标注.折线.多边形的右键删除 效果图如下: 完整代码如下:html+js <!DOCTYPE htm ...

  9. Hadoop简介与伪分布式搭建—DAY01

    一.  Hadoop的一些相关概念及思想 1.hadoop的核心组成: (1)hdfs分布式文件系统 (2)mapreduce 分布式批处理运算框架 (3)yarn 分布式资源调度系统 2.hadoo ...

  10. python strip()函数的用法

    函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)         删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.lstrip(rm)        删除s字符串中 ...