美文网首页
ES6解决了什么问题

ES6解决了什么问题

作者: 对象未定义 | 来源:发表于2018-03-07 12:28 被阅读0次

    ECMAScript 6.0于2015 年 6 月正式发布了,成为JavaScript 语言的下一代标准。ES6增加的语言特性解决了哪些问题,会给开发者哪些便利,是本文主要探讨的问题。

    增加了对unicode字符的支持

    ES5对字符的处理有限,无法很好地处理码点大于0xFFFF的字符。

    ES6在string原生方法中支持码点大于0xFFFF的字符,取得码点或是遍历,都可以直接操作;并且对字符不同的表示方法做了统一化。

    在正则表达式里新增\u \s修饰符,使得正则对特殊字符的匹配不需要开发者额外处理。

    异步编程

    ES6 前异步编程的解决方式:

    • 回调函数
    • 事件监听
    • 发布/订阅
    • 自定义promise

    Promise

    ES6提供了原生的Promise对象,统一了用法和标准。

    • 对象的状态不受外界影响。能够方便地获取异步操作的状态、赋予对应操作。
    • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。

    缺点

    • 无法取消Promise,一旦新建它就会立即执行,无法中途取消。
    • 如果不设置回调函数,或在catch中再次抛出错误。Promise内部抛出的错误,不会反应到外部。
    • 当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

    Generator

    Generator 函数形式上与普通函数无异,特征有二

    1. function关键字与函数名之间有一个星号;
    2. 函数体内部使用yield表达式,来表明函数执行的状态。

    意义:

    • 可以交出函数的执行权(即暂停执行)

    • 函数体内外的数据交换

      可以在 Generator 函数运行的不同阶段,调整函数行为。包括从外部向内部注入不同的值,控制返回和抛出错误。

    async

    (ES2017 标准引入)

    async函数从理解上来说, Generator 函数的星号(*)替换成async,将yield替换成await

    但相比较generate而言,内置执行器,有更易于理解的语义。

    async函数返回一个 Promise 对象,可以使用then方法添加回调函数。async函数内部return语句返回的值,会成为then方法回调函数的参数。

    当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

    只要一个await语句后面的 Promise 变为reject,那么整个async函数都会中断执行。且返回的Promise对象变为rejected状态。

    减少全局变量和方法

    ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面。 逐步减少全局性方法,使得语言逐步模块化。

    代码作用域

    增加let,const的变量声明方式,不存在变量提升,不允许重复声明,使语言使用更加严谨。

    增加块级作用域, 使得变量的作用域更利于管理,也使得立即执行函数表达式不再必要了。

    增加箭头函数

    让this绑定定义时所在的作用域,而不是指向运行时所在的作用域,也使得表达更加简洁。

    语法糖

    ES6推出了模版字符串,使得多行字符串及夹杂变量的字符串写起来更加方便。

    对象增加属性名表达式与简洁表示法。

    增加遍历器机制,为各种不同的数据结构提供统一的访问机制。

    增加解构的语法,取值更直观方便。

    增加class关键字来定义类,过去,生成实例对象的传统方法是通过构造函数。不再和传统面向对象语言有大的差异。且支持extends。

    元编程

    引入Proxy对象,可以拦截某些操作并实现自定义行为。

    引入 Rflect对象,可以获取默认操作,可以将默认操作从处理程序转发到目标。

    Symbol

    symbol 是一种基本数据类型 ,提供一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。

    更多的原生方法

    ES6提供了更多的原生方法,避免了开发者重复造轮子。如字符串的查找。

    完善正则的匹配规则,如新加的y、s修饰符。

    增加了set、map的数据结构。

    虽然JavaScript 不适合进行科学和金融方面的精确计算,但增加Number.EPSILON等数值方法,使得对数值操作易于在精度方面进行控制。

    增加对对象的操作与读取的API。

    优化

    对尾递归进行优化,赋予javscript运行复杂度更高的方法的能力。


    参考

    ECMAScript 6 入门

    相关文章

      网友评论

          本文标题:ES6解决了什么问题

          本文链接:https://www.haomeiwen.com/subject/wvrjfftx.html