ES8特性

    xiaoxiao2021-04-18  247

    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


    最新回复(0)