可能很多人都跟我一样,一直在写ES6的语法,但是一直都没有搞清楚它到底是什么。ECMA或ES6是ECMAScript6.0的简写,ECMA可以理解成是一个标准化的组织,类似于像W3C、HTML5等。同时也是一个标准,它诞生出来的标准就叫ES。从某种程度上讲ES类似于JS。都是ECMA的实现。本着温故知新的想法,写一篇关于es6的总结。
时间 | ECMA | JS | 解释 |
---|---|---|---|
1996.11 | ES 1.0 | JS稳定 | Netscape将JS提交给ECMA组织,ES正式出现 |
1998.06 | ES 2.0 | ES2正式发布 | |
1999.12 | ES 3.0 | ES3被广泛支持 | |
2007.10 | ES 4.0 | ES4过于激进,被废了 | |
2008.07 | ES 3.1 | 4.0退化为严重缩水版的3.1 因为吵得太厉害,所以ES 3.1代号为Harmony(和谐) |
|
2009.12 | ES 5.0 | ES 5.0正式发布 同时公布了JavaScript.next也就是后来的ES 6.0 |
|
2011.06 | ES 5.1 | ES 5.1成为了ISO国际标准 | |
2013.03 | ES 6.0 | ES 6.0草案定稿 | |
2013.12 | ES 6.0 | ES 6.0草案发布 | |
2015.06 | ES 6.0 | ES 6.0预计发布正式版 JavaScript.next开始指向ES 7.0 |
${a}xxx${b}
用反引号 里面可以写变量等 let p1=new Promise(function (resolve, reject){
$.ajax({
url: 'data/arr.txt',
dataType: 'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
let p2=new Promise(function (resolve, reject){
$.ajax({
url: 'data/json.txt',
dataType: 'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
Promise.all([ p1, p2 ]).then(function (arr){
alert('全都成功了');
}, function (){
alert('至少有一个失败了');
});
Promise.race 竞速
Promise.race([
$.ajax({url: 'http://a2.taobao.com/data/users'}),
$.ajax({url: 'http://a15.taobao.com/data/users'}),
$.ajax({url: 'http://a3.taobao.com/data/users'}),
$.ajax({url: 'http://a7.taobao.com/data/users'})
]);
也可以直接return 一个Promise
7. generator
有道翻译其为生成器,引用Blue老师的一句话就是generator函数是“踹一脚,走一步”。
let genobj = function *show(){
yield // 放弃执行的意思
}
genobj.next();// 执行yield后面的代码。
runner(function *(){
let data1=yield $.ajax({url: 'data/1.txt', dataType: 'json'});
let data2=yield $.ajax({url: 'data/2.txt', dataType: 'json'});
let data3=yield $.ajax({url: 'data/3.txt', dataType: 'json'});
console.log(data1, data2, data3);
});
runner.js
function runner(_gen){
return new Promise((resolve, reject)=>{
var gen=_gen();
_next();
function _next(_last_res){
var res=gen.next(_last_res);
if(!res.done){
var obj=res.value;
if(obj.then){
obj.then((res)=>{
_next(res);
}, (err)=>{
reject(err);
});
}else if(typeof obj=='function'){
if(obj.constructor.toString().startsWith('function GeneratorFunction()')){
runner(obj).then(res=>_next(res), reject);
}else{
_next(obj());
}
}else{
_next(obj);
}
}else{
resolve(res.value);
}
}
});
}
JSON.stringify({a:12,b:5}) => '{"a":12,"b":5}'
JSON.parse('{"a":12,"b":5}')=> {a:12,b:5}
class Test{
constructor(){
this.xxx=
}
方法1(){
}
方法2(){
}
}
class Cls2 extends Cls1{
constructor(){
super();
}
}
ps:后续慢慢完善文章,在此特别感谢BLUE老师的分享