ES8 是 ECMA-262 标准第 8 版的简称,从 ES6 开始每年发布一个版本,以年份作为名称,因此又称 ECMAScript 2017,简称 ES2017。
1、字符串填充
-ES8 String.prototype.padStart 和 String.prototype.padEnd 两个函数,用于在字符串开头或结尾添加填充字符串;开发者可以指定填充的字符串或者使用默认的空格,函数的声明如下:
String.prototype.padStart( maxLength [ , fillString ] )
String.prototype.padEnd( maxLength [ , fillString ] )
# 举个例子
'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.entries
- 这两个静态方法是对原有的 Object.keys() 方法的补充。
const obj = {
x: 'xxx',
y: 1
};
Object.keys(obj); // ['x', 'y']
- 静态方法 Object.values() 获取对象的所有可遍历属性的值,返回一个数组。示例如下:
// 基本用法
const obj = {
x: 'xxx',
y: 1
};
Object.values(obj); // ['xxx', 1]
// 数组可以看做键为下标的对象
// ['e', 's', '8'] -> { 0: 'e', 1: 's', 2: '8' }
const obj = ['e', 's', '8'];
Object.values(obj); // ['e', 's', '8']
// 字符串可以看做键为下标的对象
// 'es8' -> { 0: 'e', 1: 's', 2: '8' }
Object.values('es8'); // ['e', 's', '8']
// 如果是纯 number 型的键值,则返回值顺序根据键值从小到大排列
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.values(obj); // ['yyy', 'zzz', 'xxx']
- 静态方法 Object.entries 获取对象的虽有可遍历属性的键值对,以 [key, value] 数组的形式返回,顺序和 Object.values() 一致。
// 基本用法
const obj = {
x: 'xxx',
y: 1
};
Object.entries(obj); // [['x', 'xxx'], ['y', 1]]
// 数组可以看做键为下标的对象
// ['e', 's', '8'] -> { 0: 'e', 1: 's', 2: '8' }
const obj = ['e', 's', '8'];
Object.entries(obj); // [['0', 'e'], ['1', 's'], ['2', '8']]
// 字符串可以看做键为下标的对象
// 'es8' -> { 0: 'e', 1: 's', 2: '8' }
Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]
// 如果是纯 number 型的键值,则返回值顺序根据键值从小到大排列
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.entries(obj); // [['1', 'yyy'], ['3', 'zzz'], ['10': 'xxx']]
上述的 Object.keys(), Object.values(), Object.entries() 通常用来遍历一个对象,除了这三个方法外,常用的还有 for...in 和 for...of + Object.keys() 循环
上述例子中两种遍历方式等价。但在更复杂的情况下,这两种方式的结果会不一样。for...in 循环会遍历对象的可枚举属性,包括原型链上继承的属性,而 Object.keys() 不会遍历继承的属性。
3、Trailing commas in function
- ES8 标准中允许函数参数列表与调用中的尾部逗号,该特性允许我们在定义或者调用函数时添加尾部逗号。
function es8(var1, var2, var3,) {
// do something
console.log(arguments.length)//3
}
es8(10, 20, 30,);
4、Async functions
- 为解决异步调用引入的 async 函数
async function fetchData(url) {
try {
let request = await fetch(url);
let text = await request.text();
return JSON.parse(text);
}
catch (err) {
console.log(`Error: ${err.stack}`);
}
}
//异步函数声明
asyncfunction fooBar( ) { }
//异步函数表达式
constfooBar = async function ( ) { };
//异步方法定义
letobj = { async fooBar( ) { } }
//异步箭头函数
constfooBar = async ( ) => { };
5、Shared memory and atomics
SharedArrayBuffer 和 Atomics 是 JavaScript 为多线程能力增加的特性,暂时使用的场景不多
END