win7+nodejs promise es60.12.7不支持es6么

ThinkJS 2.0 - 使用 ES6/7 全部特性开发 Node 项目 - CNode技术社区
www.thinkjs.org
ThinkJS 是一款使用 ES6/7 特性全新开发的 Node.js MVC 框架,使用 ES7 中async/await,或者 ES6 中的 Generator Function 特性彻底解决了 Node.js 中异步嵌套的问题。同时吸收了国内外众多框架的设计理念和思想,让开发 Node.js 项目更加简单、高效。
使用 ES6/7 特性来开发项目可以大大提高开发效率,是趋势所在。并且新版的 Node.js 对 ES6 特性也有了较好的支持,即使有些特性还没有支持,也可以借助
编译来支持。
//控制器代码示例, home/controller/user.js
export default class extends think.controller.base {
//login action
async loginAction(self){
//如果是get请求,直接显示登录页面
if(this.isGet()){
return this.display();
//这里可以通过post方法获取所有的数据,数据已经在logic里做了校验
let data = this.post();
let md5 = think.md5('think_' + data.pwd);
//用户名和加密后的密码去匹配数据库中对于的条目
let result = await this.model('user').where({name: data.name, pwd: md5}).find();
//如果未匹配到任何数据,表示用户名或者密码错误
if(think.isEmpty(result)){
return this.fail('login fail');
//获取到用户信息后,将用户信息写入session
await this.session('userInfo', result);
return this.success();
项目中可以大胆使用 ES6/7 里的所有特性,借助 Babel 编译,可以稳定运行在 &=0.12.0 的 Node.js 环境中。
使用 ES6/7 全部特性来开发项目
支持多种项目结构和多种项目环境
支持 Mysql,MongoDB,SQLite 等多种数据库
代码自动更新,无需重启 Node 服务
支持 ,SockJS 等多种 WebSocket 库
支持 Memory,File,Db,Redis 等多种 Session
支持 Memory,File,Redis,Memcache 等多种 Cache
支持 ejs,jade,swig,numjucks 等多种模版引擎
支持切面编程,支持 __before,__after 等多种魔术方法
支持自定义 400,404,500,503 等多种错误页面
支持命令行调用和执行定时任务
丰富的 Hook 和 Middleware
详细的日志,如:请求日志、错误日志、性能日志
支持命令自动创建 REST API
支持国际化和多主题
丰富的测试用例,1500+ 测试用里,代码覆盖率 & 95%
npm install -g thinkjs
thinkjs new project_path --es6
Watch Compile
cd project_
npm run watch-compile
cd project_
在线文档:
收藏,楼主好人
楼主好人…
这种回复也是醉了…
忠实用户表示支持
全部特性!!!!!!!!!
ps: 借楼求问,可能接触js时间不长,觉得调试相比python真是件困难到不知多少倍的事情。特别是再经过babel编译。。。
Babel 编译后可以保持行号和源代码一致(需要编译时加 --retain-lines
参数),这样报错后就能快速定位了。
至于 JS 本身调试,确实要比其他语言复杂一些,主要是在异步上。所以现在推荐使用 ES6 里的 */yield 或者 ES7 里的 async/await 来解决异步的问题,然后用 Babel 编译。
楼主好人,谢谢分享
没populate差评
来自炫酷的
感觉是thinkphp的中文翻版?
来自炫酷的
越来越喜欢material design?
在台下听welefen讲编译的问题= =
为啥编译后性能反而会更高。
一方面 Babel 编译做了很多优化,另一方面 V8 对 ES6 特性还只是实现阶段,没有做优化
为什么没有thinkjava
1.0 是因为java水平不够吗?
每次听您讲到然而上游似乎并不在乎似乎都有一种淡淡的无奈。。。
贵司没考虑加入nodejs基金会强行么233…
我觉得java没必要,生态太完善了。。。看看红帽中国那群人都搞起web容器了。。。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的io.js是Node.js的一个民间分支,详细参考:,Node.js因为有大量NPM库包,为了追求成熟稳定导致Node.js不敢再大幅度变革,而Io.js是轻装上阵,有人预测Io.js也许是未来,如今快速发布支持ES6的1.0.0版本。Io.js目前定位于基于Node.js的NPM库包,这次新版本发布除了支持Javascript 6以外,大幅度提高了性能和稳定性,升级了V8引擎到3.31.74.1 版本。在buffer、child_process、 console、 cluster、crypto、dgram、dns、events、fs、http、os、path、process、querystring、smalloc、streams、tls、timer、url、zlib。包括:1.升级c-ares: 1.9.0-DEV 到 1.10.0-DEV2.升级http_parser: 1.0 到 2.33.升级.libuv: 0.10.30 到 1.2.04.升级npm: 1.4.28 到 2.1.185.升级openssl: 1.0.1j 到 1.0.1k6. 升级punycode: 1.2.0 到 1.3.2.
(1)支持ES6如下特性:1.块级作用域 (let, const)2.集合(Map, WeakMap, Set, WeakSet)3.Generators4,Binary and Octal literals5.Promises6.新的字符方法7.Symbols8.模板字符串Template strings具体用法见:(2)通过下面命令查询V8版本:iojs -p process.versions.v8
(3)增加两个新模块::一个新的核心模块,支持JavaScript(外部)原内存分配/释放/复制: 核心模块,直接与V8引擎的接口(4)起步使用与Node.js类似:iojs app.js
(5)Stream 3支持[该贴被banq于 13:55修改过]
最佳分辨率
OpenSource
Code & 2002-20node.js v0.10.40 和node.js v4.2.2的区别_百度知道
node.js v0.10.40 和node.js v4.2.2的区别
jquery运行客户端javascript库主要提供操作DOM等等简化操作;node.js运行服务器端服务器程序运行javascript语言服务器软件解释执行js语言用js语言操作服务器层面事务比创建http链接信息I/O些jquery用js语言进行操作执行说node.js利用js语言服务器程序运行jquery其些事件用;jqueryjs库主要处理客户端事务
其他类似问题
为您推荐:
其他1条回答
近习nodejs同疑问,找些资料享啊:0.*Joyent公司维护.进展缓慢.稳定.4.*,5.*都由网友维护.相进展快,增加许新功能.偶数稳定版,奇数发版断变化更新.稳定版本做测试差意思.现都nodejs基金面.所咱nodejs网站看更新候版本更新.说区别看nodejs发展历史.原文址:使用,载4版本行.
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁前端开发者必不得不知的ES6十大特性 - 推酷
前端开发者必不得不知的ES6十大特性
ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率。
本文主要针对ES6做一个简要介绍。&主要译自:
。也许你还不知道ES6是什么, 实际上, 它是一种新的javascript规范。在这个大家都很忙碌的时代,如果你想对ES6有一个快速的了解,那么请继续往下读,去了解当今最流行的编程语言JavaScript最新一代的十大特性。
以下是ES6排名前十的最佳特性列表(排名不分先后):
Default&Parameters(默认参数)&in&ES6
Template&Literals&(模板文本)in&ES6
Multi-line&Strings&(多行字符串)in&ES6
Destructuring&Assignment&(解构赋值)in&ES6
Enhanced&Object&Literals&(增强的对象文本)in&ES6
Arrow&Functions&(箭头函数)in&ES6
Promises&in&ES6
Block-Scoped&Constructs&Let&and&Const(块作用域构造Let&and&Const)
Classes(类)&in&ES6
Modules(模块)&in&ES6
声明:这些列表仅是个人主观意见。它绝不是为了削弱ES6其它功能,这里只列出了10条比较常用的特性。
首先回顾一下JavaScript的历史,不清楚历史的人,很难理解JavaScript为什么会这样发展。下面就是一个简单的JavaScript发展时间轴:
1、1995:JavaScript诞生,它的初始名叫LiveScript。
2、1997:ECMAScript标准确立。
3、1999:ES3出现,与此同时IE5风靡一时。
4、:&XMLHttpRequest又名AJAX,&在Outlook&Web&Access&(2000)、Oddpost&(2002),Gmail&(2004)和Google&Maps&(2005)大受重用。
5、2009:&ES5出现,(就是我们大多数人现在使用的)例如foreach,Object.keys,Object.create和JSON标准。
6、2015:ES6/ECMAScript2015出现。
历史回顾就先到此,现让我们进入正题。
1.Default&Parameters(默认参数)&in&ES6
还记得我们以前不得不通过下面方式来定义默认参数:
var&link&=&function&(height,&color,&url)&{
&&&&var&height&=&height&||&50;
&&&&var&color&=&color&||&'red';
&&&&var&url&=&url&||&'http://azat.co';
一切工作都是正常的,直到参数值是0后,就有问题了,因为在JavaScript中,0表示fasly,它是默认被hard-coded的值,而不能变成参数本身的值。当然,如果你非要用0作为值,我们可以忽略这一缺陷并且使用逻辑OR就行了!但在ES6,我们可以直接把默认值放在函数申明里:
var&link&=&function(height&=&50,&color&=&'red',&url&=&'http://azat.co')&{
顺便说一句,这个语法类似于Ruby!
2.Template&Literals(模板对象)&in&ES6
在其它语言中,使用模板和插入值是在字符串里面输出变量的一种方式。因此,在ES5,我们可以这样组合一个字符串:
var&name&=&'Your&name&is&'&+&first&+&'&'&+&last&+&'.';
var&url&=&'http://localhost:3000/api/messages/'&+&
幸运的是,在ES6中,我们可以使用新的语法$&{NAME},并把它放在反引号里
var&name&=&`Your&name&is&${first}&${last}.&`;
var&url&=&`http://localhost:3000/api/messages/${id}`;
3.Multi-line&Strings&(多行字符串)in&ES6
ES6的多行字符串是一个非常实用的功能。在ES5中,我们不得不使用以下方法来表示多行字符串:
var&roadPoem&=&'Then&took&the&other,&as&just&as&fair,nt'
&&&&+&'And&having&perhaps&the&better&claimnt'
&&&&+&'Because&it&was&grassy&and&wanted&wear,nt'
&&&&+&'Though&as&for&that&the&passing&therent'
&&&&+&'Had&worn&them&really&about&the&same,nt';
var&fourAgreements&=&'You&have&the&right&to&be&you.n
&&&&You&can&only&be&you&when&you&do&your&best.';
然而在ES6中,仅仅用反引号就可以解决了:
var&roadPoem&=&`Then&took&the&other,&as&just&as&fair,
&&&&And&having&perhaps&the&better&claim
&&&&Because&it&was&grassy&and&wanted&wear,
&&&&Though&as&for&that&the&passing&there
&&&&Had&worn&them&really&about&the&same,`;
var&fourAgreements&=&`You&have&the&right&to&be&you.
&&&&You&can&only&be&you&when&you&do&your&best.`;
4.Destructuring&Assignment&(解构赋值)in&ES6
解构可能是一个比较难以掌握的概念。先从一个简单的赋值讲起,其中house&和&mouse是key,同时house&和mouse也是一个变量,在ES5中是这样:
var&data&=&$('body').data(),&//&data&has&properties&house&and&mouse
&& house&=&data.house,
&& mouse&=&data.
以及在node.js中用ES5是这样:
var&jsonMiddleware&=&require('body-parser').jsonMiddleware&;
var&body&=&req.body,&//&body&has&username&and&password
&& username&=&body.username,
&& password&=&body.&&
在ES6,我们可以使用这些语句代替上面的ES5代码:
var&{&house,&mouse}&=&$('body').data();&//&we'll&get&house&and&mouse&variables
var&{jsonMiddleware}&=&require('body-parser');
var&{username,&password}&=&req.
这个同样也适用于数组,非常赞的用法:
var&[col1,&col2]&&=&$('.column'),
&& [line1,&line2,&line3,&,&line5]&=&file.split('n');
我们可能需要一些时间来习惯解构赋值语法的使用,但是它确实能给我们带来许多意外的收获。
5.Enhanced&Object&Literals&(增强的对象字面量)in&ES6
使用对象文本可以做许多让人意想不到的事情!通过ES6,我们可以把ES5中的JSON变得更加接近于一个类。
下面是一个典型ES5对象文本,里面有一些方法和属性:
var&serviceBase&=&{port:&3000,&url:&'azat.co'},
&&&&getAccounts&=&function(){return&[1,2,3]};
var&accountServiceES5&=&{
&&port:&serviceBase.port,
&&url:&serviceBase.url,
&&getAccounts:&getAccounts,
&&&toString:&function()&{
&&&&&&return&JSON.stringify(this.valueOf());
&&getUrl:&function()&{return&&http://&&+&this.url&+&':'&+&this.port},
&&valueOf_1_2_3:&getAccounts()
如果我们想让它更有意思,我们可以用Object.create从serviceBase继承原型的方法:
var&accountServiceES5ObjectCreate&=&Object.create(serviceBase)
var&accountServiceES5ObjectCreate&=&{
&&getAccounts:&getAccounts,
&&toString:&function()&{
&&&&return&JSON.stringify(this.valueOf());
&&getUrl:&function()&{return&&http://&&+&this.url&+&':'&+&this.port},
&&valueOf_1_2_3:&getAccounts()
我们知道,accountServiceES5ObjectCreate&和accountServiceES5&并不是完全一致的,因为一个对象(accountServiceES5)在__proto__对象中将有下面这些属性:
为了方便举例,我们将考虑它们的相似处。所以在ES6的对象文本中,既可以直接分配getAccounts:&getAccounts,也可以只需用一个getAccounts,此外,我们在这里通过__proto__(并不是通过’proto’)设置属性,如下所示:
var&serviceBase&=&{port:&3000,&url:&'azat.co'},
getAccounts&=&function(){return&[1,2,3]};
var&accountService&=&{
&&&&__proto__:&serviceBase,
&&&&getAccounts,
另外,我们可以调用super防范,以及使用动态key值(valueOf_1_2_3):
&&&&toString()&{
&&&&&return&JSON.stringify((super.valueOf()));
&&&&getUrl()&{return&&http://&&+&this.url&+&':'&+&this.port},
&&&&[&'valueOf_'&+&getAccounts().join('_')&]:&getAccounts()
console.log(accountService)
ES6对象文本是一个很大的进步对于旧版的对象文本来说。
6.Arrow&Functions&in(箭头函数)&ES6
这是我迫不及待想讲的一个特征,CoffeeScript&就是因为它丰富的箭头函数让很多开发者喜爱。在ES6中,也有了丰富的箭头函数。这些丰富的箭头是令人惊讶的因为它们将使许多操作变成现实,比如,
以前我们使用闭包,this总是预期之外地产生改变,而箭头函数的迷人之处在于,现在你的this可以按照你的预期使用了,身处箭头函数里面,this还是原来的this。
有了箭头函数在ES6中,&我们就不必用that&=&this或&self&=&&this&&或&_this&=&this&&或.bind(this)。例如,下面的代码用ES5就不是很优雅:
var&_this&=&
$('.btn').click(function(event){
&&_this.sendData();
在ES6中就不需要用&_this&=&this:
$('.btn').click((event)&=&{
&&this.sendData();
不幸的是,ES6委员会决定,以前的function的传递方式也是一个很好的方案,所以它们仍然保留了以前的功能。
下面这是一个另外的例子,我们通过call传递文本给logUpperCase()&函数在ES5中:
var&logUpperCase&=&function()&{
&&var&_this&=&
&&this.string&=&this.string.toUpperCase();
&&return&function&()&{
&&&&return&console.log(_this.string);
logUpperCase.call({&string:&'ES6&rocks'&})();
而在ES6,我们并不需要用_this浪费时间:
var&logUpperCase&=&function()&{
&&this.string&=&this.string.toUpperCase();
&&return&()&=&&console.log(this.string);
logUpperCase.call({&string:&'ES6&rocks'&})();
请注意,只要你愿意,在ES6中=&可以混合和匹配老的函数一起使用。当在一行代码中用了箭头函数,它就变成了一个表达式。它将暗地里返回单个语句的结果。如果你超过了一行,将需要明确使用return。
这是用ES5代码创建一个消息数组:
var&ids&=&['e345e145fdf2df8','5e145fdf2df9'];
var&messages&=&ids.map(function&(value)&{
&&return&&ID&is&&&+&&//&explicit&return
用ES6是这样:
var&ids&=&['e345e145fdf2df8','5e145fdf2df9'];
var&messages&=&ids.map(value&=&&`ID&is&${value}`);&//&implicit&return
请注意,这里用了字符串模板。
在箭头函数中,对于单个参数,括号()是可选的,但当你超过一个参数的时候你就需要他们。
在ES5代码有明确的返回功能:
var&ids&=&['e345e145fdf2df8',&'5e145fdf2df9'];
var&messages&=&ids.map(function&(value,&index,&list)&{
&&return&'ID&of&'&+&index&+&'&element&is&'&+&value&+&'&';&//&explicit&return
在ES6中有更加严谨的版本,参数需要被包含在括号里并且它是隐式的返回:
var&ids&=&['e345e145fdf2df8','5e145fdf2df9'];
var&messages&=&ids.map((value,&index,&list)&=&&`ID&of&${index}&element&is&${value}&`);&//&implicit&return
7.&Promises&in&ES6
Promises&是一个有争议的话题。因此有许多略微不同的promise&实现语法。Q,bluebird,deferred.js,vow,&avow,&jquery&一些可以列出名字的。也有人说我们不需要promises,仅仅使用异步,生成器,回调等就够了。但令人高兴的是,在ES6中有标准的Promise实现。
下面是一个简单的用setTimeout()实现的异步延迟加载函数:
setTimeout(function(){
&&console.log('Yay!');
在ES6中,我们可以用promise重写:
var&wait1000&=&&new&Promise(function(resolve,&reject)&{
&&setTimeout(resolve,&1000);
}).then(function()&{
&&console.log('Yay!');
或者用ES6的箭头函数:
var&wait1000&=&&new&Promise((resolve,&reject)=&&{
&&setTimeout(resolve,&1000);
}).then(()=&&{
&&console.log('Yay!');
到目前为止,代码的行数从三行增加到五行,并没有任何明显的好处。确实,如果我们有更多的嵌套逻辑在setTimeout()回调函数中,我们将发现更多好处:
setTimeout(function(){
&&console.log('Yay!');
&&setTimeout(function(){
&&&&console.log('Wheeyee!');
&&},&1000)
在ES6中我们可以用promises重写:
var&wait1000&=&&()=&&new&Promise((resolve,&reject)=&&{setTimeout(resolve,&1000)});
wait1000()
&&&&.then(function()&{
&&&&&&&&console.log('Yay!')
&&&&&&&&return&wait1000()
&&&&.then(function()&{
&&&&&&&&console.log('Wheeyee!')
还是不确信Promises&比普通回调更好?其实我也不确信,我认为一旦你有回调的想法,那么就没有必要额外增加promises的复杂性。
虽然,ES6&有让人崇拜的Promises&。Promises&是一个有利有弊的回调但是确实是一个好的特性,更多详细的信息关于promise:
8.Block-Scoped&Constructs&Let&and&Const(块作用域和构造let和const)
在ES6代码中,你可能已经看到那熟悉的身影let。在ES6里let并不是一个花俏的特性,它是更复杂的。Let是一种新的变量申明方式,它允许你把变量作用域控制在块级里面。我们用大括号定义代码块,在ES5中,块级作用域起不了任何作用:
function&calculateTotalAmount&(vip)&{
&&var&amount&=&0;
&&if&(vip)&{
&&&&var&amount&=&1;
&&{&//&more&crazy&blocks!
&&&&var&amount&=&100;
&&&&&&var&amount&=&1000;
console.log(calculateTotalAmount(true));
结果将返回1000,这真是一个bug。在ES6中,我们用let限制块级作用域。而var是限制函数作用域。
function&calculateTotalAmount&(vip)&{
&&var&amount&=&0;&//&probably&should&also&be&let,&but&you&can&mix&var&and&let
&&if&(vip)&{
&&&&let&amount&=&1;&//&first&amount&is&still&0
&&{&//&more&crazy&blocks!
&&&&let&amount&=&100;&//&first&amount&is&still&0
&&&&&&let&amount&=&1000;&//&first&amount&is&still&0
console.log(calculateTotalAmount(true));
这个结果将会是0,因为块作用域中有了let。如果(amount=1).那么这个表达式将返回1。谈到const,就更加容易了;它就是一个不变量,也是块级作用域就像let一样。下面是一个演示,这里有一堆常量,它们互不影响,因为它们属于不同的块级作用域:
function&calculateTotalAmount&(vip)&{
&&const&amount&=&0;&&
&&if&(vip)&{
&&&&const&amount&=&1;
&&{&//&more&crazy&blocks!
&&&&const&amount&=&100&;
&&&&&&const&amount&=&1000;
console.log(calculateTotalAmount(true));
从我个人看来,let&和const使这个语言变复杂了。没有它们的话,我们只需考虑一种方式,现在有许多种场景需要考虑。
9.&Classes&(类)in&ES6
如果你喜欢面向对象编程(OOP),那么你将喜爱这个特性。以后写一个类和继承将变得跟在facebook上写一个评论那么容易。
类的创建和使用真是一件令人头疼的事情在过去的ES5中,因为没有一个关键字class&(它被保留,但是什么也不能做)。在此之上,大量的继承模型像
更加增加了混乱,JavaScript&之间的宗教战争只会更加火上浇油。
用ES5写一个类,有很多种方法,这里就先不说了。现在就来看看如何用ES6写一个类吧。ES6没有用函数, 而是使用原型实现类。我们创建一个类baseModel&,并且在这个类里定义了一个constructor&和一个&getName()方法:
class&baseModel&{
&&constructor(options,&data)&{&//&class&constructor,node.js 5.6暂时不支持options&=&{},&data&=&[]这样传参
&&&&this.name&=&'Base';
&&&&this.url&=&'http://azat.co/api';
&&&&this.data&=&
&&&&this.options&=&
&&&&getName()&{&//&class&method
&&&&&&&&console.log(`Class&name:&${this.name}`);
注意我们对options&和data使用了默认参数值。此外方法名也不需要加function关键字,而且冒号(:)也不需要了。另外一个大的区别就是你不需要分配属性this。现在设置一个属性的值,只需简单的在构造函数中分配。
AccountModel&从类baseModel&中继承而来:
class&AccountModel&extends&baseModel&{
&&&&constructor(options,&data)&{
为了调用父级构造函数,可以毫不费力的唤起super()用参数传递:
&&&&&&&&&&super({private:&true},&['',&'']);&//call&the&parent&method&with&super
&&&&&&this.name&=&'Account&Model';
&&&&&&this.url&+='/accounts/';
如果你想做些更好玩的,你可以把 accountData 设置成一个属性:
&&&&get&accountsData()&{&//calculated&attribute&getter
&&&&//&...&make&XHR
&&&&&&&&return&this.
那么,你如何调用他们呢?它是非常容易的:
let&accounts&=&new&AccountModel(5);
accounts.getName();
console.log('Data&is&%s',&accounts.accountsData);
结果令人惊讶,输出是:
Class&name:&Account&Model
Data&is &,
10.&Modules&(模块)in&ES6
众所周知,在ES6以前JavaScript并不支持本地的模块。人们想出了AMD,RequireJS,CommonJS以及其它解决方法。现在ES6中可以用模块import&和export&操作了。
在ES5中,你可以在&&script&中直接写可以运行的代码(简称IIFE),或者一些库像AMD。然而在ES6中,你可以用export导入你的类。下面举个例子,在ES5中,module.js有port变量和getAccounts&方法:
module.exports&=&{
&&port:&3000,
&&getAccounts:&function()&{
在ES5中,main.js需要依赖require('module')&导入module.js:
var&service&=&require('module.js');
console.log(service.port);&//&3000&
但在ES6中,我们将用export&and&import。例如,这是我们用ES6&写的module.js文件库:
export&var&port&=&3000;
export&function&getAccounts(url)&{
如果用ES6来导入到文件main.js中,我们需用import&{name}&from&'my-module'语法,例如:
import&{port,&getAccounts}&from&'module';
console.log(port);&//&3000
或者我们可以在main.js中把整个模块导入, 并命名为 service:
import&*&as&service&from&'module';
console.log(service.port);&//&3000
从我个人角度来说,我觉得ES6模块是让人困惑的。但可以肯定的事,它们使语言更加灵活了。
并不是所有的浏览器都支持ES6模块,所以你需要使用一些像jspm去支持ES6模块。
更多的信息和例子关于ES6模块,请看
。不管怎样,请写模块化的JavaScript。
如何使用ES6&&(Babel)
ES6已经敲定,但并不是所有的浏览器都完全支持,详见:
。要使用ES6,需要一个编译器例如:babel。你可以把它作为一个独立的工具使用,也可以把它放在构建中。grunt,gulp和webpack中都有可以支持babel的插件。
这是一个gulp案列,安装gulp-babel插件:
$&npm&install&--save-dev&gulp-babel
在gulpfile.js中,定义一个任务build,放入src/app.js,并且编译它进入构建文件中。
var&gulp&=&require('gulp'),
&&babel&=&require('gulp-babel');
gulp.task('build',&function&()&{
&&return&gulp.src('src/app.js')
&&&&.pipe(babel())
&&&&.pipe(gulp.dest('build'));
Node.js&and&ES6
在nodejs中,你可以用构建工具或者独立的Babel模块 babel-core 来编译你的Node.js文件。安装如下:
$&npm&install&--save-dev&babel-core
然后在node.js中,你可以调用这个函数:
require(&babel-core&).transform(ES5Code,&options);
这里还有许多ES6的其它特性你可能会使用到,排名不分先后:
1、全新的Math,&Number,&String,&Array&和&Object&方法
2、二进制和八进制数据类型
3、默认参数不定参数扩展运算符
4、Symbols符号
5、tail调用
6、Generators&(生成器)
7、New&data&structures&like&Map&and&Set(新的数据构造对像MAP和set)
参考文献:
http://ES6-features.org/#DateTimeFormatting
IIFE:立刻运行的函数表达式
最后感谢大家阅读,感谢小龙、教授、高工的指正建议,欢迎大家指出探讨
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 nodejs 开启es6 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信