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后的逻辑时,无论是否回调都会等所有逻辑执行完成才会往下走。就是这个特性才可以将异步变同步。如下是同步连续请求三个网页,只有前一个网页返回值之后,才请求第二个网页。
暂无评论