ES8特性

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

你可能感兴趣的:(ES8特性)