ES6 新特性

1.默认参数(Default Parameters)

function test(a , b){ }

function test(a=1 , b=’2′){ }

2.模板对象(Template Literals)

var str = ‘My name is ‘+ first+’ ‘+last+’。’;

var str = ‘My name is ${first} ${last}。’;

3.多行字符串(Multi-line Strings)

用反引号来定义字符串可以包含回车。

var str = `top

middle

end`;

4.解构赋值(Destructuring Assignment)

var {a,b} = {‘a’:’string-a’,’b’:’string-b’};   // a=’string-a’ ; b=’string-b’

5.箭头函数(Arrow Functions)

function(a,b){console.log(a+’;’+b);}

等同于:

(a,b) => console.log(a+’;’+b);

6.新的变量声明方式let 和const,都是块级作用域。

7.export 和 import

8.class 与 constructor

class AccountModel extends baseModel {

constructor(options, data) {  }

}

9.对象文本

var serviceBase = { port: 3000, url: ‘azat.co’ },
getAccounts = function () { return [1, 2, 3] };
var accountService = {
__proto__: serviceBase,
getAccounts,
toString() {
return JSON.stringify((super.valueOf()));
},
getUrl() { return “http://” + this.url + ‘:’ + this.port },
[‘valueOf_’ + getAccounts().join(‘_’)]: getAccounts()
};

10.可以将异步变为同步的神奇的generator

function* test() {  //  function必须加*
yield ‘a’;
yield ‘b’;
return ‘end’;
}

var it = test(); //  (1)返回的it是迭代器对象

it.next(); //  (2)当执行next()时开始从第一个yield执行到第二个yield的起始位置,返回{value:’a’,done:false}

it.next(‘insert’); //  (3)当next有传入值时,此值会覆盖上一个yield的值。返回{value:’b’,done:false},(4)如果没有return,yield ‘b’是最后一行,返回值也不变。

it.next(); // 返回{value:’end’,done:true},(5)只有没有此return则会返回{value:undefined,done:true}

for ( let v of test() ) {

console.log(v);  //  (6)使用let of可以遍历每个yield的值(最后一个return的值不会在循环中),就相当于it.next().value

}

//  (7)如果generator函数套用,可以使用yield*,否则内部的generator函数不生效。(8)只要实现了iterator就可以被yield*遍历,包括数组。

function* insideFunc() {
yield ‘x’;
yield* test();
yield ‘y’;
}

//  (9)执行yield后的逻辑时,无论是否回调都会等所有逻辑执行完成才会往下走。就是这个特性才可以将异步变同步。如下是同步连续请求三个网页,只有前一个网页返回值之后,才请求第二个网页。

function getData(url, func) {
setTimeout(() =>func(‘返回:’+url), 1000);
// func(‘返回:’ + url); 没有延迟会报错:Generator is already running
}
function request(url) {
getData(url, function (response) {
it.next(response);
});
console.log(‘请求:’+url);
}
function* ajaxs() {
console.log(yieldrequest(‘a.html’));
console.log(yieldrequest(‘b.html’));
console.log(yieldrequest(‘c.html’));
}
var it = ajaxs();
it.next();

 

暂无评论

发表评论

邮箱地址不会被公开。 必填项已用*标注