回顾
es6从2009年到2015年整整用了6年时间,变化也是非常的大,非常值得去学习。但是现在的前端发展可以说日新月异,所以我们赶紧来看下es7,es8给我们带来了什么吧!
es7(es2016)
es7 只增加了2个新功能(除了错误修复和一些很小的改进)
1、Array.prototype.includes
- 概念:判断数组是否包含某元素
用法:
[‘a’, ‘b’, ‘c’].includes(‘a’) // true
[‘a’, ‘b’, ‘c’].includes(‘d’) // falseincludes类似于indexOf- 以下两个表达式大部分是等价的:
arr.includes(x)
arr.indexOf(x) >= 0主要区别在于includes()发现NaN,而indexOf()不是:
[NaN].includes(NaN) // true
[NaN].indexOf(NaN) // -1includes不加区分+0和-0
[-0].includes(+0) //true
类型数组也将有一个方法includes():
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true
2、求幂运算符(**)
- 概念:等同于Math.pow()
- 用法
2 3 === 8
let a = 2; a = 3 === 8
3、误区
async 不在这个版本哦,在es8
es8(es2017)
1、padStart&padEnd
- 概念:字符串填充,参数1表示长度,参数2表示填充字段,默认为空格
- 用法
‘es8’.padStart(2); // ‘es8’
‘es8’.padStart(5); // ‘ es8’
‘es8’.padStart(6, ‘woof’); // ‘wooes8’
‘es8’.padStart(14, ‘wow’); // ‘wowwowwowwoes8’
‘es8’.padStart(7, ‘0’); // ‘0000es8’
‘es8’.padEnd(2); // ‘es8’
‘es8’.padEnd(5); // ‘es8 ’
‘es8’.padEnd(6, ‘woof’); // ‘es8woo’
‘es8’.padEnd(14, ‘wow’); // ‘es8wowwowwowwo’
‘es8’.padEnd(7, ‘6’); // ‘es86666’
2、Object.values
- 概念:获取对象的值,有别于Object.keys
- 用法
const obj = { x: ‘xxx’, y: 1 };
Object.values(obj); // [‘xxx’, 1]
Object.values(‘es8’); // [‘e’, ‘s’, ‘8’]
3、Object.entries
- 概念:返回一个给定对象自己的枚举属性[key, value]对的数组
- 用法
const obj = { x: ‘xxx’, y: 1 };
Object.entries(obj); // [[‘x’, ‘xxx’], [‘y’, 1]]
const obj = [‘e’, ‘s’, ‘8’];
Object.entries(obj); // [[‘0’, ‘e’], [‘1’, ‘s’], [‘2’, ‘8’]]
const obj = { 10: ‘xxx’, 1: ‘yyy’, 3: ‘zzz’ };
Object.entries(obj); // [[‘1’, ‘yyy’], [‘3’, ‘zzz’], [‘10’: ‘xxx’]]
Object.entries(‘es8’); // [[‘0’, ‘e’], [‘1’, ‘s’], [‘2’, ‘8’]]
4、Object.getOwnPropertyDescriptors
- 概念:返回定对象的所有属性描述符
- 用法
const obj = {
get es7() { return 777; },
get es8() { return 888; }
};
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
// }
// }
5、允许函数参数最后是逗号(不理解这个有什么用)
申明: function es8(var1,var2,var3 ,){
// …
}
调用: es8(10,20,30 ,);
6、期待已久的async function
- 概念:es6 generater函数的语法糖,同步写法实现异步代码
- 用法
function fetchTextByPromise() {
return new Promise(resolve => {
setTimeout(() => {
resolve(“es8”);
}, 2000);
});
}
async function sayHello() {
const externalFetchedText = await fetchTextByPromise();
console.log(Hello, ${externalFetchedText}
); // Hello, es8
}
console.log(1);
sayHello();
console.log(2);
结果为:
1
2
Hello, es8
7、共享内存与原子操作
共享内存允许多个线程并发读写数据,而原子操作则能够进行并发控制,确保多个存在竞争关系的线程顺序执行。本部分则介绍了新的构造器 SharedArrayBuffer 与包含静态方法的命名空间对象 Atomics。Atomic 对象类似于 Math,我们无法直接创建其实例,而只能使用其提供的静态方法:
add /sub - 增加或者减去某个位置的某个值
and / or /xor - 进行位操作
load - 获取值
总结
自从es6出来之后,es将会进入常更新模块,一年一个版本,es要开启新纪元了