ES8主要新特性介绍

      ECMAScript6 的开发花费了四年之久,之后TC-39决定缩短开发周期,采用年度周期来发布语言的新特性,以确保语言的迭代速率与性能的快速发展。

    由于开发周期的缩短,可想而知的是此后每个新的ES版本拥有的新特性会比从ES5时代变到ES6时代时少许多。为了标识这种新的变化,新版本号不再重点描述版本的数字代号,而是改为指明规范发布的年份,因此,ES6也被称为ES2015,而ES8也正式被命名为ES2017。TC-39小组决定将来所有的ES版本都采用如上的年份命名规则。

    EcmaScript 8 或 EcmaScript 2017,由去年6月底由 TC39 正式发布至今已有一整年的时间了。

    下面笔者将简要介绍ES8的一些主要新特性:

一、padStart

padStart() 方法会用第二个参数中指定的填充字符串,在当前字符串的头部不断填充,直到它达到第一个参数中指定的目标长度。

ex:

‘es8’.padStart(2); // 'es8'

'es8'.padStart(5); // '    es8'

'es8'.padStart(6, 'woof'); // 'wooes8'


二、padEnd

padEnd() 方法会用第二个参数中指定的填充字符串,在当前字符串的尾部不断填充,直到它达到第一个参数中指定的目标长度。

ex:

‘es8’.padEnd(2); // 'es8'

'es8'.padEnd(5); // 'es8   '

'es8'.padEnd(6, 'woof'); // 'es8woo'

‘es8’.padEnd(7, '6'); // 'es86666'


三、兼容性

Object.values

Object.values()方法返回一个给定对象中所有可枚举属性值的数组,值的顺序与使用

for...in循环的顺序相同(区别在于for-in循环枚举原型链中的属性)。

const obj = { x: 'xxx', y: 1 };

Object.values(obj); // ['xxx', 1]


// 等价于 { 0: 'e', 1: 's', 2: '8' };

const obj = ['e', 's', '8'];

Object.values(obj); // ['e', 's', '8']


// 当使用数值作为键时,返回数组中的每一项的

// 顺序将取决于数值的大小

const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };

Object.values(obj); // [ 'yyy', 'zzz', 'xxx' ]


Object.entries

Object.entries()方法返回一个给定对象中可枚举属性[key, value]对的数组,数组中键值对的排列顺序和使用 for...in循环遍历该对象时返回的顺序一直(区别在于 for...in循环也枚举原型链中的属性)。

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');


Object.getOwnPropertyDescriptors

Object.getOwnPropertyDescriptors()方法用来获取一个对象的所有自身属性的描述符。

const obj = { get es8() { return 888; } };

Object.getOwnPropertyDescriptors(obj, 'es8');


四、Async

async function声明定义了一个异步函数,它返回一个AsyncFunction对象。

function fetchTextByPromise() {

    return new Promise(resolve => {

        setTimeout( () => {

            resolve("es8");

        }, 2000);

    });

}

async function sayHello() {

    const externalFetchedText = await fetchTextByPromise();

    console.log(`Hello, ${externalFecthedText}`);

}

console.log(1);

sayHello();

console.log(2);


五、Shared memory and atomics

当共享内存时,多个线程可以在内存中读取和写入相同的数据。原子操作确保可预测的值被写入和读取,即在下一个操作开始之前完成本次操作,并且该次操作不会被中断。接下来我们要介绍Atomics命名空间下的ShareArrayBuffer。

ShareArrayBuffer

ShareArrayBuffer对象用来表示一个泛型的,固定长度的原生二进制数据缓冲区,类似于ArrayBuffer对象。但在某种程度上,它们能被用于在共享内存上创建视图。与ArrayBuffer不同的是,ShareArrayBuffer不能被移除。

// 为了使用 SharedArrayBuffer 对象从一个位于集群中的

// 代理到另一个代理,实现共享内容,需要运用 postMessage 和 structured cloning。

var sab = new SharedArrayBuffer(1024);

worker.postMessage(sab);

... ...

你可能感兴趣的:(ES8主要新特性介绍)