Node.js 4.0 中的 ES 6 特性介绍

Node.js 4.0.0 已经发布了。这是和 io.js 合并之后的首个稳定版本,它带来了一系列的新特性,支持 ES 6的大部分特性。已经有很多 ES 6 的特性介绍了,这里我们介绍一下该怎么使用它们。

1. 模板字符串

如果你要在 JavaScript 中创建多行字符串,你可能会使用如下的语法:


  1. var message = [
  2. 'The quick brown fox',
  3. 'jumps over',
  4. 'the lazy dog'
  5. ].join('\n');

对于少量字符串这还算合适,但是如果比较多就会显得混乱。不过,有个聪明的开发者提出了一个叫 multiline 的技巧:


  1. var multiline = require('multiline');
  2. var message = multiline(function () {/*
  3. The quick brown fox
  4. jumps over
  5. the lazy dog
  6. */});

幸运的是,ES 6 为我们带来了模板字符串:


  1. var message = `
  2. The quick brown fox
  3. jumps over
  4. the lazy dog
  5. `;

此外,它还给我们带来了字符串内插:


  1. var name = 'Schroedinger';
  2. // 不要这样做 ...
  3. var message = 'Hello ' + name + ', how is your cat?';
  4. var message = ['Hello ', name, ', how is your cat?'].join('');
  5. var message = require('util').format('Hello %s, how is your cat?', name);
  6. // 应该这样做 ...
  7. var message = `Hello ${name}, how is your cat?`;

在 MDN 上查看模板字符串的细节.

2. 类

在 ES5 中定义类看起来有点奇怪,也比较麻烦:


  1. var Pet = function (name) {
  2. this._name = name;
  3. };
  4. Pet.prototype.sayHello = function () {
  5. console.log('*scratch*');
  6. };
  7. Object.defineProperty(Pet.prototype, 'name', {
  8. get: function () {
  9. return this._name;
  10. }
  11. });
  12. var Cat = function (name) {
  13. Pet.call(this, name);
  14. };
  15. require('util').inherits(Cat, Pet);
  16. Cat.prototype.sayHello = function () {
  17. Pet.prototype.sayHello.call(this);
  18. console.log('miaaaauw');
  19. };

幸运的是,在 Node.js 中可以使用新的 ES6 格式:


  1. class Pet {
  2. constructor(name) {
  3. this._name = name;
  4. }
  5. sayHello() {
  6. console.log('*scratch*');
  7. }
  8. get name() {
  9. return this._name;
  10. }
  11. }
  12. class Cat extends Pet {
  13. constructor(name) {
  14. super(name);
  15. }
  16. sayHello() {
  17. super.sayHello();
  18. console.log('miaaaauw');
  19. }
  20. }

有 extends 关键字、构造子、调用超类及属性,是不是很棒?还不止这些,看看 MDN 上的更详细的介绍。

3. 箭头函数

在函数里面对 this 的动态绑定总是会导致一些混乱,人们一般是这样用的:


  1. Cat.prototype.notifyListeners = function () {
  2. var self = this;
  3. this._listeners.forEach(function (listener) {
  4. self.notifyListener(listener);
  5. });
  6. };

  1. Cat.prototype.notifyListeners = function () {
  2. this._listeners.forEach(function (listener) {
  3. this.notifyListener(listener);
  4. }.bind(this));
  5. };

现在你可以使用胖箭头函数了:


  1. Cat.prototype.notifyListeners = function () {
  2. this._listeners.forEach((listener) => {
  3. this.notifyListener(listener);
  4. });
  5. };

了解箭头函数的更多细节。.

4. 对象字面量

使用对象字面量,你现在有了很漂亮的快捷方式:


  1. var age = 10, name = 'Petsy', size = 32;
  2. // 不要这样做 ...
  3. var cat = {
  4. age: age,
  5. name: name,
  6. size: size
  7. };
  8. // ... 而是这样做 ...
  9. var cat = {
  10. age,
  11. name,
  12. size
  13. };

此外,你现在可以很容易地 给你的对象字面量添加函数

5. Promise

不用再依赖像 bluebird 或 Q这样的第三方库了,你现在可以使用 原生的 promise. 它们公开了如下 API:


  1. var p1 = new Promise(function (resolve, reject) {});
  2. var p2 = Promise.resolve(20);
  3. var p3 = Promise.reject(new Error());
  4. var p4 = Promise.all(p1, p2);
  5. var p5 = Promise.race(p1, p2);
  6. // 显然
  7. p1.then(() => {}).catch(() => {});

6. 字符串方法

我们也有了一系列新的字符串功能:


  1. // 在几种情况下可以替代 `indexOf()`
  2. name.startsWith('a')
  3. name.endsWith('c');
  4. name.includes('b');
  5. // 重复字符串三次
  6. name.repeat(3);

去告诉那些使用 Ruby 的家伙吧!字符串现在也 对 unicode 支持更好了

7. let 和 const

猜猜下列函数调用的返回值:


  1. var x = 20;
  2. (function () {
  3. if (x === 20) {
  4. var x = 30;
  5. }
  6. return x;
  7. }()); // -> undefined

是的, undefined。使用 let 替代 var ,你会得到预期的行为:


  1. let x = 20;
  2. (function () {
  3. if (x === 20) {
  4. let x = 30;
  5. }
  6. return x;
  7. }()); // -> 20

原因是什么呢? var 是函数作用域,而 let 是块级作用域(如大部分人所预期的)。因此,可以说 let 是一个新var。 你可以在 MDN 上了解更多细节

此外,Node.js 也支持 const 关键字了,它可以防止你为同一个引用赋予不同的值:


  1. var MY_CONST = 42; // no, no
  2. const MY_CONST = 42; // yes, yes
  3. MY_CONST = 10 // 使用了 const ,这就不行了

结语

Node.js 4.0.0 带来了更多的 ES6 特性,我希望这七个例子可以吸引你升级到最新版本。

还有更多的语言特性呢(例如,maps/sets, 符号和生成器,这里只提到了一点)。你可以看看 Node.js 4.0.0 的 ES6 概览。 赶快升级吧!

本文来自合作伙伴“Linux中国”,原文发布日期:2015-09-14

时间: 2025-01-19 18:50:11

Node.js 4.0 中的 ES 6 特性介绍的相关文章

拥抱 Node.js 8.0,N-API 入门极简例子

本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. N-API简介 Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API.编写过或者使用过 node扩展的同学,不少都遇到过升级node版本,node扩展编译失败的情况.因为node扩展严重依赖于V8暴露的API,而node不同版本依赖的V8版本可能不同,一旦升级node版本,原先运行正常的node扩展就编译失败了. 这种情况对node生态圈无疑是不

Node.js v8.0.0 正式发布,带来大量更新

Node.js v8.0.0 已正式发布.v8.0.0 是下一个主要的版本,带来了一系列重大的变化和新功能,内容十分多,本文包含主要重要的更改和功能的摘要. npm 5.0.0 npm 最近宣布发布了 5.0.0 版本的 npm 客户端,现在在 Node.js 8.0.0 中使用了这个重要的新版本. V8 5.8 Node.js 8.0.0 使用了 V8 5.8,这是 JavaScript 运行时的重要更新,其中包括性能方面和面向开发者 API 的重大改进.对 Node.js 开发者来说最重要的

在 Ubuntu 14.04/15.04 上配置 Node JS v4.0.0

大家好,Node.JS 4.0 发布了,这个流行的服务器端 JS 平台合并了 Node.js 和 io.js 的代码,4.0 版就是这两个项目结合的产物--现在合并为一个代码库.这次最主要的变化是 Node.js 封装了4.5 版本的 Google V8 JS 引擎,与当前的 Chrome 所带的一致.所以,紧跟 V8 的发布可以让 Node.js 运行的更快.更安全,同时更好的利用 ES6 的很多语言特性. Node JS Node.js 4.0 发布的主要目标是为 io.js 用户提供一个简

Node.js v6 LTS 中最激动人心的六个 ES6 特性

本文讲的是Node.js v6 LTS 中最激动人心的六个 ES6 特性, 随着 Node.js v6 LTS "Boron" 的发布,Node.js 的核心 API 和依赖关系得到了全面的改进.基于 Chromium 的 JavaScript 引擎的 Node.js V8 的更新非常重要,它具备对 Node.js 和 JavaScript 开发者心心相印的 ES6 的几乎全方位的支持. 这篇文章中,我们将一起了解 Node.js v6 LTS 版本中的六个最新的 ES6 特性. 给函

Node.js v8.0.0 带来了哪些主要新特性

Node.js于5月30号在其官方博客上发布了Node.js v8.0.0.这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号.而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束. 最新发布的版本代号为Carbon,带来了很多重要的特性改进和一些全新的特性. 引入async_hooks模块新引入实验性模块async_hooks(之前叫作async_wrap),它包含了一组用于诊断的API,开发人员可以用它监控Node.js事件循环

一起谈.NET技术,NHibernate 3.0.0.Alpha1 发布及新特性介绍

发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5平台,具体文件如下. NHibernate源码:NHibernate-3.0.0.Alpha1-src.zip NHibernate二进制文件:NHibernate-3.0.0.Alpha1-bin.zip 特性介绍 N

NHibernate 3.0.0.Alpha1 发布及新特性介绍

发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5平台,具体文件如下. NHibernate源码:NHibernate-3.0.0.Alpha1-src.zip NHibernate二进制文件:NHibernate-3.0.0.Alpha1-bin.zip 特性介绍 N

node.js下IE中获取数据的缓存

IE下默认会开启缓存策略,不管是页面还是通过ajax请求的数据都会议一个url,url是uri(统一资源定位符)的实例,url就是资源的标识符. 写一个demo进行验证,测试环境:IE8,node.js 0.12.7,页面模板为jade.  页面代码:testCache.jade 页面上放一个按钮,点下后从后台获取一个自增的数值显示在按钮上. doctype htmlhtml    head        meta(charset='utf-8')        title= title    

剖析Node.js异步编程中的回调与代码设计模式_node.js

NodeJS 最大的卖点--事件机制和异步 IO,对开发者并不是透明的.开发者需要按异步方式编写代码才用得上这个卖点,而这一点也遭到了一些 NodeJS 反对者的抨击.但不管怎样,异步编程确实是 NodeJS 最大的特点,没有掌握异步编程就不能说是真正学会了 NodeJS.本章将介绍与异步编程相关的各种知识. 在代码中,异步编程的直接体现就是回调.异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了.我们首先可以看看以下代码. function heavyCompute(n, callb