QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

《探索 ES6》书评与作者采访

  • 2015-07-12
  • 本文字数:2073 字

    阅读完需:约 7 分钟

由 Axel Rauschmayer 编著的 **《探索ES6》** 是对 JavaScript 最新特性的一次深入探讨,本文包含了对作者所进行的一次简短的访谈内容。

Axel Rauschmayer 博士的著作《探索 ES6:升级至 JavaScript 的下一个版本》(Exploring ES6: Upgrade to the next version of JavaScript)是 ECMAScript 2015 中新引入特性的一份全面指南,读者还可以参考配套的代码示例。作者假设读者已经熟悉 JavaScript 的特性,或是能够通过阅读他的另一本著作《Speaking JavaScript》很快地上手,后者对于 ES5 及之前的语言特性进行了深入的讲解。

《探索 ES6一书首先对于 JavaScript 的历史进行了简单的回顾,包括它的版本变迁、标准化组织、设计过程、以及这门语言当下的目标:让 JavaScript 成为一门更优秀的语言、具有更强的互操作性,同时又保持对之前版本的兼容。作者注意到了这一点:ECMA 组织最终决定让 JavaScript 保持完整的向后兼容性,以避免“破坏 web”,他们要求与之相关者保持继续运行旧版本的代码的能力,并保证新引入的特性不会与之前的代码产生冲突。本书接下来的部分着重强调了将 ES6 代码转译(即编译)为 ES5 代码的一系列重要工具,包括包管理、模块管理、lint 工具、shim、polyfill、解析器和 REPL 等等。

在关于一致性方面的介绍之后,Rauschmayer 开始进入 ES6 的新特性,他首先对这些新特性进行了简短的描述,并列举了示例代码,然后对它们进行了深入的探讨。在某些地方也会解释一下为什么 ECMA 会决定以这种方式设计这门语言。其中的某些特性,例如类与模块已经由各种类库提供了对应的功能,但其它的一些特性都是全新的,包括 promise、生成器(generator)或代理(proxy)。以下是作者在本书中所涵盖的一些特性(尚有部分内容并未列举在下表中):

  • 数据:数值、Math 方法、新的 string 方法、模板字符串、符号(symbol)、范围(scoping)、解构(destructuring)
  • 模块化:箭头函数(arrow function)、类、模块
  • 集合:新的数组特性、Map、Set、生成器
  • 其它特性:异步编程、Unicode、代理

本书的末尾部分提供了大量的代码风格提示:例如何时使用常量、let 或箭头函数,避免混用默认导出(export)与命名导出、格式化生成器、以及推荐使用类等等。

我们对作者进行了一次采访,以了解他在相关主题方面的看法。

InfoQES5 如今已经在主流的 JavaScript 平台上得到了完整的实现,但目前还没有任何平台能够完整地实现所有的 ES6 特性,并且在每个平台上已实现的特性可能各不相同。如果说还没有一个特性已经得到所有主流平台的支持,web 开发者们又该如何编写 ES6 代码呢?你对此有什么建议?

AR首个完全支持 ECMAScript 6 的 JavaScript 引擎恐怕要到 2016 年才会出现,在那之前,唯一合理的方式就是将 ES6 编译为 ES5 再部署编译后的代码。等到了 2016 年之后,你就可以检查一下每个引擎的情况,看它是否已经支持了 ES6(或者只检查一下你所使用的那部分特性)。对于已经支持的特性,可以在代码中加载原生的版本,否则依然要使用编译后的 ES5 版本。

InfoQ根据之前 ES5 的采用情况来看,你认为主流浏览器大概需要多久才能够完整地实现 ES6?是一年、两年还是五年?

AR这一点真的很难说,因为我不清楚微软与苹果公司的日程计划。在 status.modern.ie 网站上,微软仍然将某些核心特性列为“考虑中”,而苹果则依然保持一贯的神秘感。但 Mozilla 与 Google 在这方面进展良好,大概在 2015 年末或 2016 年初就会完全支持 ES6 了。

InfoQ你对于 One JavaScript 这种思想有什么看法?对于 web 的发展来说,这种方式是否比强制版本化的做法更好?至少后者承诺能够带来更整洁的语言。

ARDavid Herman 将 ES6 避免版本化问题的做法称为“One JavaScript”。大体上说,它表示 ES6 是 ES5 的一个超集,也就是说 ES6 是 100% 向后兼容的,这也避免了将 JavaScript 分割为 ES5(及更早版本)和 ES6(及之后的版本)两个阵营。这种方式保持了 JavaScript 引擎的简单性,将 ES5 代码库迁移到 ES6 也变得十分简单,因为它其实就是 ES6 的一个有效子集。One JavaScript 方式唯一的缺点就是限制了你对这门语言进行清理的机会:你永远无法移除特性,只能添加新的特性。

InfoQ有没有哪些特性是你希望出现,却尚未包括在 ES6 中的,或者说有哪些特性是你希望以另一种方式进行标准化的呢?

ARES6 本身已经非常丰富了。虽然我可能会稍微改变一下类的实现,但能够在 ES6 中看到它已经很欣慰了。从长远一点的观点来看,我希望看到特质(trait)(或 mixin)的出现,并希望标准库中的内容能够更丰富一些(尤其是关于迭代操作的工具方法)。

InfoQ本书中的某些章节还没有完成,你是否已计划好它们的完成时间了呢?

AR:我已经完成了我认为最重要的所有章节,我会尽量在接下来几个月中完成剩余的章节。

《探索ES6》的在线版本包括免费的HTML 版本,以及对应某个推荐价格的PDF、ePub 或MOBI 格式的电子书。

ES6 刚刚由 ECMA 国际投票通过,可以在《ECMAScript 2015 正式发布》这篇帖子中找到关于此事的更多细节。

查看英文原文 Exploring ES6: Book Introduction and Author Interview

2015-07-12 08:285302
用户头像

发布了 428 篇内容, 共 180.6 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

Java开发之线程、多线程,线程池面试题

@零度

多线程 线程池 JAVA开发

模块七 王者荣耀商城异地多活架构设计

小朱

架构实战营

Azkaban工作流调度

恒生LIGHT云社区

工作流 工作流调度 任务调度 Azkaban

腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会

腾讯安全云鼎实验室

商用密码 云上安全 数字生态 安全服务

打造“智慧之眼”与“创新之轮”,华睿科技助推制造业智能升级

科技新消息

学习乐器的好处

Tiger

28天写作

从科技出发,中科柏诚信云链为中小企业融资注入新动能

联营汇聚

如何有效使用预训练语言模型

云智慧AIOps社区

算法 智能运维 云智慧 语言模型 南加州大学

Linxu云计算这样学效率更快,Linux基础篇,expect-正则表达式-sed-cut的使用

学神来啦

Linux centos sed linux运维 expect

拿捏SQL数据分析:从基础破冰到面试题解

博文视点Broadview

Flutter开发:运行项目时提示Error parsing LocalFile:‘/Users/xxx/android/app/src/main/AndroidManifest.xml’…解决方法

三掌柜

28t 28天写作 12月日更

DM 分库分表 DDL “乐观协调” 模式介绍丨TiDB 工具分享

PingCAP

TCP 两次握手为什么无法阻止历史连接?

华为云开发者联盟

TCP 报文 握手 RST 报文 两次握手

Flutter 完美的验证码输入框(2 种方法)【Flutter专题25】

坚果

flutter 28天写作 12月日更

Gartner技术成熟曲线详解

Kafka中文社区

Java泛型可行与不可行

编程江湖

AI新手语音入门:认识词错率WER与字错率CER

华为云开发者联盟

语音识别 词错率 WER 字错率 CER

服务器数量从21台降至3台,TDengine在跨越速运集团的落地实践

TDengine

数据库 tdengine 时序数据库

“数”驰天下,华为云DRS 高效支撑T3出行平稳迁移

华为云开发者联盟

数据库 数据迁移 华为云DRS T3出行

Log4j2 消停了,Logback 开始塌房了?

程序猿DD

Java 日志 漏洞

使用 USE 方法分析系统性能瓶颈

耳东@Erdong

监控 28天写作 use 12月日更

了解 Java 中的锁 Lock

Ayue、

ReentrantReadWriteLock ReentrantLock lock

小红书基于 StarRocks 构建广告数据中心的实践

StarRocks

数据库 数据分析 StarRocks

群聊泄密敲响警钟,WorkPlus织密信息安全“防护网”

BeeWorks

管理中的平衡

张老蔫

28天写作

react源码解析16.concurrent模式

buchila11

React

如何用建木CI生成Allure报表

Jianmu

CI/CD Allure 国产开源

react源码解析15.scheduler&Lane

buchila11

React

给弟弟的信第22封|写技术博客有哪些益处?

大菠萝

28天写作

性能监控之 Golang 应用接入 Prometheus 监控

zuozewei

Prometheus 性能测试 性能监控 Go 语言 12月日更

PassJava 开源(五) :SpringCloud Alibaba 组件简介 #私藏项目实操分享#

悟空聊架构

SpringCloud 28天写作 passjava 悟空聊架构 12月日更

《探索ES6》书评与作者采访_JavaScript_Abel Avram_InfoQ精选文章