ECMAScript 2017(ES8)特性概述 整顿自 ES8 was Released and here are its Main New Features,归结于笔者的当代 JavaScript 开辟:语法基本与实践技能系列文章中;也迎接关注前端每周清单系列取得一手资讯。
ECMAScript 2017(ES8)Features
ECMAScript 2017 或 ES8 与 2017 年六月尾由 TC39 正式宣布,可以在这里阅读完全的版本;而 ES8 中代表性的特性包括了字符串添补、对象值遍历、对象的属性描述符猎取、 函数参数列表与挪用中的尾部逗号、异步函数、同享内存与原子操纵等。
字符串添补
ES8 中增添了内置的字符串添补函数,分别为 padStart 与 padEnd,该函数可以经由过程添补字符串的首部或许尾部来保证字符串到达牢固的长度;开辟者可以指定添补的字符串或许运用默许的空格,函数的声明以下:
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])
如上所示,函数的首个参数为目的长度,即终究天生的字符串长度;第二个参数等于指定的添补字符串:
'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'
对象指遍历
Object.values
函数会返回指定对象的可罗列的属性值数组,数组中值递次与 for-in
轮回保持一致,函数的声明为:
Object.values(obj)
首个参数 obj
即为须要遍历的目的对象,它可认为某个对象或许数组(数组可以看作键为下标的对象):
const obj = { x: 'xxx', y: 1 };
Object.values(obj); // ['xxx', 1]
const obj = ['e', 's', '8']; // same as { 0: 'e', 1: 's', 2: '8' };
Object.values(obj); // ['e', 's', '8']
// when we use numeric keys, the values returned in a numerical
// order according to the keys
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.values(obj); // ['yyy', 'zzz', 'xxx']
Object.values('es8'); // ['e', 's', '8']
而 Object.entries
要领则会将某个对象的可罗列属性与值根据二维数组的体式格局返回,数组中递次与 Object.values
保持一致,该函数的声明与运用为:
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']]
对象的属性描述符猎取
getOwnPropertyDescriptors
函数会返回指定对象的某个指定属性的描述符;该属性必需是对象本身定义而不是继续自原型链,函数的声明为:
Object.getOwnPropertyDescriptor(obj, prop)
obj
即为源对象,而 prop
即为须要检察的属性名;效果中包括的键可能有 configurable、enumerable、writable、get、set 以及 value。
const obj = { get es8() { return 888; } };
Object.getOwnPropertyDescriptor(obj, 'es8');
// {
// configurable: true,
// enumerable: true,
// get: function es8(){}, //the getter function
// set: undefined
// }
函数参数列表与挪用中的尾部逗号
该特性许可我们在定义或许挪用函数时增添尾部逗号而不报错:
function es8(var1, var2, var3,) {
// ...
}
es8(10, 20, 30,);
异步函数
ES8 中许可运用 async/await 语法来定义与实行异步函数,async 关键字会返回某个 AsyncFunction 对象;在内部完成中虽然异步函数与迭代器的完成道理相似,然则其并不会被转化为迭代器函数:
function fetchTextByPromise() {
return new Promise(resolve => {
setTimeout(() => {
resolve("es8");
}, 2000);
});
}
async function sayHello() {
const externalFetchedText = await fetchTextByPromise();
console.log(`Hello, ${externalFetchedText}`); // Hello, es8
}
sayHello();
console.log(1);
sayHello();
console.log(2);
// 挪用效果
1 // immediately
2 // immediately
Hello, es8 // after 2 seconds
同享内存与原子操纵
同享内存许可多个线程并发读写数据,而原子操纵则可以举行并发掌握,确保多个存在合作关联的线程递次实行。本部分则引见了新的组织器 SharedArrayBuffer
与包括静态要领的定名空间对象 Atomics
。Atomic
对象相似于 Math
,我们没法直接建立其实例,而只能运用其供应的静态要领:
add /sub – 增添或许减去某个位置的某个值
and / or /xor – 举行位操纵
load – 猎取值