ES6解决了什么问题

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 入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,254评论 5 22
  • 以下内容是我在学习和研究ES6时,对ES6的特性、重点和注意事项的提取、精练和总结,可以做为ES6特性的字典;在本...
    科研者阅读 3,030评论 2 9
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 3,329评论 0 19
  • 在此处先列下本篇文章的主要内容 简介 next方法的参数 for...of循环 Generator.prototy...
    醉生夢死阅读 1,424评论 3 8
  • Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...
    呼呼哥阅读 2,126评论 0 16