为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


5ba9f35900018a2e07000475.jpg


1. 模板字符串

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


var message = [

    'The quick brown fox',

    'jumps over',

    'the lazy dog'

].join('\n');

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


var multiline = require('multiline');

var message = multiline(function () {/*

    The quick brown fox

    jumps over

    the lazy dog

*/});

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


var message = `

    The quick brown fox

        jumps over

        the lazy dog

`;

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


var name = 'Schroedinger';

// 不要这样做 ...

var message = 'Hello ' + name + ', how is your cat?';

var message = ['Hello ', name, ', how is your cat?'].join('');

var message = require('util').format('Hello %s, how is your cat?', name);

// 应该这样做 ...

var message = `Hello ${name}, how is your cat?`;

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


2. 类

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


var Pet = function (name) {

    this._name = name;

};

Pet.prototype.sayHello = function () {

    console.log('*scratch*');

};

Object.defineProperty(Pet.prototype, 'name', {

  get: function () {

    return this._name;

  }

});

var Cat = function (name) {

    Pet.call(this, name);

};

require('util').inherits(Cat, Pet);

Cat.prototype.sayHello = function () {

    Pet.prototype.sayHello.call(this);

    console.log('miaaaauw');

};

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


class Pet {

    constructor(name) {

        this._name = name;

    }

    sayHello() {

        console.log('*scratch*');

    }

    get name() {

        return this._name;

    }

}

class Cat extends Pet {

    constructor(name) {

        super(name);

    }

    sayHello() {

        super.sayHello();

        console.log('miaaaauw');

    }

}

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


3. 箭头函数

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


Cat.prototype.notifyListeners = function () {

    var self = this;

    this._listeners.forEach(function (listener) {

        self.notifyListener(listener);

    });

};

Cat.prototype.notifyListeners = function () {

    this._listeners.forEach(function (listener) {

        this.notifyListener(listener);

    }.bind(this));

};

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


Cat.prototype.notifyListeners = function () {

    this._listeners.forEach((listener) => {

        this.notifyListener(listener);

    });

};

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


4. 对象字面量

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


var age = 10, name = 'Petsy', size = 32;

// 不要这样做 ...

var cat = {

    age: age,

    name: name,

    size: size

};

// ... 而是这样做 ...

var cat = {

    age,

    name,

    size

};

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


5. Promise

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


var p1 = new Promise(function (resolve, reject) {});

var p2 = Promise.resolve(20);

var p3 = Promise.reject(new Error());

var p4 = Promise.all(p1, p2);

var p5 = Promise.race(p1, p2);

// 显然

p1.then(() => {}).catch(() => {});

6. 字符串方法

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


// 在几种情况下可以替代 `indexOf()`

name.startsWith('a')

name.endsWith('c');

name.includes('b');

// 重复字符串三次

name.repeat(3);

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


7. let 和 const

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


var x = 20;

(function () {

    if (x === 20) {

        var x = 30;

    }

    return x;

}()); // -> undefined

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


let x = 20;

(function () {

    if (x === 20) {

        let x = 30;

    }

    return x;

}()); // -> 20

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


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


var MY_CONST = 42; // no, no

const MY_CONST = 42; // yes, yes

MY_CONST = 10 // 使用了 const ,这就不行了

结语

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


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

编译自:http://www.cli-nerd.com/2015/09/09/7-reasons-to-upgrade-to-node-v4-now.html作者: Damien Klinnert
原创:LCTT https://linux.cn/article-6212-1.html译者: Xingyu.Wang

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消