发布时间:2017年6月
总共有6个特性,最主要是第五第六!
(1)字符串填充(padStart、padEnd)
语法:
str.padStart(targetLength[,padString])
str.padEnd(targetLength[,padString])
例子:
'something'.padStart(4);//some
'something'.padStart(6);//someth
'something'.padStart(13,'just');//justsomething
'something'.padStart(17,'just');//justjustsomething
'something'.padStart(19,'just');//justjustjusomething
//padEnd类似
(2)values和entries函数
values函数只输出值;entries输出键和值。
语法:
Object.values(obj)
Object.entries(obj)
例子:
const obj = { music: 'mine', author:'jk' };
Object.value(obj);// ['mine','jk'];
Object.value('es8');// ['e','s','8']
const obj = { 3: 'a',2: 'b',1: 'c'}
Object.entries(obj);// [['1','c'],['2','b'],['3','a']]
Object.entries('es8'); //[['0','e'],['1','s'],['2','8']]
(3)getOwnPropertyDescripters函数
获取自身属性描述符。自身属性描述符就是在自身内定义,不是通过原型链继承而来。
语法:
Object.getOwnPropertyDescriptor(obj)
返回的属性描述符可能有:configurable,enumberable,writable,get,set,value
例子:
const obj = {
get es7() { return 7 },
get es8() {return 8 }
}
Object.getOwnPropertyDescriptor(obj);
// {
// es7: {
// configurable: true,
// enumerable: true,
// get: function es7(){}, //the getter function
// set: undefined
// },
// es8: {
// configurable: true,
// enumerable: true,
// get: function es8(){}, //the getter function
// set: undefined
// }
// }
(4)结尾逗号
在定义函数时以及函数调用的最后一个参数后有一个逗号不会报语法错误。
function es8(val1,val2,val3,) {
//do something
}
es8(1,2,3,);
(5)异步函数async/await**取代了Promise**
在内部,Async功能与生成器的功能相同,但是却比生成器更佳。
async与generator比较:
- 自带执行器。
Generator需要执行器才能执行,才有了co模块;async不需要额外的模块,自带执行器。
- 语义更加j清楚。
async表示异步,await表示等待;比*和yield更清楚。
- 返回值是promise。
async返回Promise,可以用then方法指定下一步操作;比起Generator返回Iterator方便。
async与Promise比较:
Async/Await使得异步代码看起来像同步代码,这就是它的魔力所在。
async fetchData(query) => {
try {
const response = await axios.get(`/q?query=${query]`);
cosnt data = response.data;
return data;
} catch(error) {
console.log('error');
}
}
fetchData(query).then(data => {
this.props.processfetchData(data)
})
Async/Await是写异步代码的新方式,以前的方法有回调函数和Promise。相比于Promise,它更加简洁,并且处理错误、条件语句、中间值都更加方便,因此有望替代Promise,成为新一代的一步代码编写方式。
(6)共享内存和Atomics
Lars Hansen提出了ES2017中 共享内存和Atomics的建议,截至2017年2月,它已在第4阶段中被批准,并包含到规范中。
此功能引入了一个新的低级别Atomics命名空间对象和一个SharedArrayBuffer构造函数,来作为更高级别并发抽象的原始构建块。这使开发人员能够共享多个service worker和核心线程之间的SharedArrayBuffer对象的数据。这种引入带来了巨大的益处,因为可以更轻松地在worker之间共享数据,从而可以改善worker之间的协调。
有关新的Atomics对象和SharedArrayBuffer构造函数的信息,请阅读深入分析或阅读Lars Hansen的简短教程。
关于这些特性的浏览器支持可以参考MDN和这片文章,这篇文章也比较全面介绍了这些特性。另一篇文章则列举了使用和不使用es8的情况。