升级 Node 4 的 7 个理由

阅读: 评论:0

升级 Node 4 的 7 个理由

升级 Node 4 的 7 个理由

前些日子 Node 4 终于发布了。作为 node.js 和 io.js 合并之后发布的第一个稳定版,Node 4 给我们带来了诸多 ES6 特性。你可以阅读这篇文章概览一下 ES6 的特性,本文将为你展示我们在 Node 4 中如何使用 ES6。

1. 模板字符串

以前我们拼字符串的话会像下边这样写:

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 foxjumps overthe lazy dog
*/});

好消息是,ES6 已经自带模板字符串语法了:

var message = `The quick brown foxjumps overthe lazy dog
`;

模板字符串语法还能插入字符串变量:

var name = 'Schroedinger';// 别再这么写糟蹋自己了!
var message = 'Hello ' +>.html< 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 = >.html<`Hello ${name}, how is your cat?`;

点击这里去 MDN 查阅关于模板字符串的详细说明。

2. 类

ES5 中我们定义一个类会这么写:

var Pet = function (name) {this._name = name;
};Pet.prototype.sayHello>.html< = 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 >.html<= function () {Pet.prototype.sayHello.call(this);console.log('miaaaauw');
};

怎么说呢,用原型链的写法可以实现效果,但是比起专门的类定义来说这么写总觉得有点怪,而且费时间。ES6 中为我们提供了类定义的语法糖:

class Pet {constructor(name) {this._name = name;}sayHello() {console.log('*scratch*');}get name() {return this._name;}
}class Cat extends >.html<Pet {constructor(name) {super(name);}sayHello(>.html<) {super.sayHello();console.log('miaaaauw');}
}

这样看起来就挺舒服了。点击这里了解更多。

3. 箭头函数

函数内的 this 指向问题已经让无数程序员晕头转向了,我们经常可以看到为了获取到外部的this指向我们不得不这么写:

ifyListeners = function () {var self = this;this._listeners.forEach(function>.html< (listener) {ifyListener(listener);});
};
ifyListeners = function () {this._listeners.forEach(function (listener) {ifyListener>.html<(listener);}.bind(this));
};

ES6 中我们可以直接使用箭头函数语法让匿名函数的 this 指向所在的作用域:

ifyListeners = function () {this._listeners.forEach((listener) => {ifyListener(listener);});
};

4. 对象定义

当你要使用对象的时候,你可以用非常简便的方法定义它:

var age = 10, name>.html< = 'Petsy', size = 32;// 以前我们只能这么写
var cat = {age: age,name: name,size: size
};// ES6 中可以这么写了
var cat>.html< = {age,name,size
};

另外,根据这个特性我们可以非常方便的给对象添加函数了。

5. Promise

以前我们只能依赖 bluebird 或者 Q 等库做 Promise 处理,现在我们可以使用原生的 Promise 函数了。原生 Promise 拥有以下几个 API:

var p1 = new Promise>.html<(function (resolve, reject) {});
var p2 = solve(20);
var p3 = ject(new Error());
var p4 = Promise.all(p1, p2);
var p5 = Promise.>.html<race(p1, p2);// and obviously
p1.then(() => {}).catch(() => {});

6. 字符串类型新增方法

ES6 为字符串增加了很多新函数:

// 在许多场景下使用下面的函数会比用 `indexOf()` 要方便很多
name.startsWith('a')
dsWith('c');
name.includes('b');// 重复 name 三次
peat(3);

而且 ES6 还增强了对 unicode 字符的支持。

7. let 和 const 语法

猜猜下面这段代码将会返回什么:

var x = 20;
(function () {if (x === 20) {var x = 30;}return x;
}()); // -> undefined

是的,由于 var x 声明提前导致返回的结果是 undefined。现在你可以使用let 代替 var 语法,你将会得到一个不一样的结果:

let x = 20;
(function (>.html<) {if (x === 20) {let x = 30;}return x;
}()); // -> 20

结果将返回 20。这个原因是因为 var 是函数作用域而let是块级作用域,if块体内定义的 let x 只在自己的块体中有效。你可以点击这里了解更多。

另外要说的是 Node 现在支持使用 const 关键字定义常量了,这样能保证你的变量值补丁:

var MY_CONST = 42; // >.html<不要这样做啦...
const MY_CONST = 42; // 最好的做法是这样MY_CONST = 10;  // 如果上面是用 const 定义的这句将不生效

总结

Node 4 携带了大量的 ES6 特性,我希望本文的几个例子能让你看到一些不错的地方从而升级到这个版本。当然还有很多其他的语言特征(像 maps/sets, symbols 和 generators),如果感兴趣可以去翻一下 官方的这篇文档。以上!

本文发布于:2024-02-04 22:48:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170718135060425.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:理由   Node
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23