资讯专栏INFORMATION COLUMN

ES6解决了什么问题

zzzmh / 1079人阅读

摘要:异步编程前异步编程的解决方式回调函数事件监听发布订阅自定义提供了原生的对象,统一了用法和标准。如果不设置回调函数,或在中再次抛出错误。函数内部语句返回的值,会成为方法回调函数的参数。

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 函数形式上与普通函数无异,特征有二

function关键字与函数名之间有一个星号;

函数体内部使用yield表达式,来表明函数执行的状态。

意义:

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

函数体内外的数据交换

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

async

(ES2017 标准引入)

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

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

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

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

减少全局变量和方法

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

代码作用域 变量的声明方式

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

块级作用域

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

箭头函数

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

语法糖

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

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

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

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

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

元编程

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

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

Symbol

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

更多的原生方法

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

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

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

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

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

优化

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

参考

ECMAScript 6 入门

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93304.html

相关文章

  • ES6引入前需要解决问题

    摘要:的新特性哪些适合使用我们参考使用进行开发的思考文章推荐的新特性,仅使用三星的。另外推荐阅读探秘系列的新特性是否通过转换后还有兼容问题团队中又同学正在验证,我们验证的环境是,我们最终会使用三星特性加上兼容性的。 showImg(https://segmentfault.com/img/bVrjev); 最近项目中的一个模块正式引入的ES6,由于是引入新技术,也遇到了一些问题,下面分享下整...

    verano 评论0 收藏0
  • ES6-7

    摘要:的翻译文档由的维护很多人说,阮老师已经有一本关于的书了入门,觉得看看这本书就足够了。前端的异步解决方案之和异步编程模式在前端开发过程中,显得越来越重要。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。 JavaScript Promise 迷你书(中文版) 超详细介绍promise的gitbook,看完再不会promise...... 本书的目的是以目前还在制定中的ECMASc...

    mudiyouyou 评论0 收藏0
  • es6 promise面试

    摘要:执行函数会返回一个遍历器对象,每一次函数里面的都相当一次遍历器对象的方法,并且可以通过方法传入自定义的来改变函数的行为。函数可以通过配合函数更轻松更优雅的实现异步编程和控制流管理。它和构造函数的不同点类的内部定义的所有方法,都是不可枚举的。 let const的命令 在ES6之前,声明变量只能用var,var方式声明变量其实是很不合理的,准确的说,是因为ES5里面没有块级作用域是很不合...

    timger 评论0 收藏0
  • ES6-class、模块化在vue中应用(10)

    摘要:我们在之前文章与面向对象编程中,说到了目前大部分框架和库,都采用了面向对象方式编程。那么具体是怎么样应用的呢面向对象编程,最典型和最基础的作用就是封装,封装的好处就是代码的能够复用,模块化,进行项目和文件的组织。模块化在中的应用。 我们在之前文章《ES6 class与面向对象编程》中,说到了目前大部分框架和库,都采用了面向对象方式编程。那么具体是怎么样应用的呢?面向对象编程,最典型和最...

    endiat 评论0 收藏0
  • JavaScript 异步

    摘要:从最开始的到封装后的都在试图解决异步编程过程中的问题。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。写一个符合规范并可配合使用的写一个符合规范并可配合使用的理解的工作原理采用回调函数来处理异步编程。 JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过...

    tuniutech 评论0 收藏0

发表评论

0条评论

zzzmh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<