以下是ES2022新功能列表:
.at() 内置可索引的方法
.at内置可索引的方法。
const cart = ['1', '2', '3'];
// first element cart.at(0); // '1'
// last element cart.at(-1); // '2'
// out of bounds cart.at(-100); // undefined cart.at(100); // undefined const int8 = new Int8Array([0, 10, 42, -10]);
// first element int8.at(0); // 0
// last element int8.at(-1); // -10
// out of bounds int8.at(-100) // undefined int8.at(100) // undefined const sentence = 'This is a sample sentence'
// first element sentence.at(0); // 'T'
// last element sentence.at(-1); // 'e'
// out of bounds sentence.at(-100) // undefined sentence.at(100) // undefined
|
正则表达式匹配索引
有关捕获的子字符串的开始和结束索引的附加信息
/(?<xs>x+)(?<ys>y+)/.exec('xxxyyxx'); /*[ 'xxxyy', 'xxx', 'yy', index: 0, input: 'xxxyyxx', groups: [Object: null prototype] { xs: 'xxx', ys: 'yy' } ]*/ let input = "abcd"; let match = /b(c)/.exec(input); let indices = match.indices;
// `indices` has the same length as match indices.length === match.length
// The first element of `indices` contains the start/end indices of the match indices[0]; // [1, 3]; input.slice(indices[0][0], indices[0][1]); // same as match[0]
// The second element of `indices` contains the start/end indices of the first capture indices[1]; // [2, 3]; input.slice(indices[1][0], indices[1][1]); // same as match[1]); Object.hasOwn Object.hasOwn
let books = {} books.prop = 'exists';
// `hasOwn` will only return true for direct properties: Object.hasOwn(books, 'prop'); // returns true Object.hasOwn(books, 'toString'); // returns false Object.hasOwn(books, 'hasOwnProperty'); // returns false
// The `in` operator will return true for direct or inherited properties: 'prop' in books; // returns true 'toString' in books; // returns true 'hasOwnProperty' in books; // returns true
|
错误的原因
Cause 属性指示错误的原因。
const actual = new Error('a better error!', { cause: 'Error cause' });
actual instanceof Error; // true actual.cause; // 'Error cause' try { maybeWorks(); } catch (err) { throw new Error('maybeWorks failed!', { cause: err }); }
|
顶级await
在模块中的异步函数之外等待
// say this is index.mjs
// fails await Promise.resolve('1'); // → SyntaxError: await is only valid in async function
// fix with wrapping (async function() { await Promise.resolve('1'); // → 2 }());
// to top-level await await Promise.resolve('1') // '1' const i18n = await import(`./content-${language}.mjs`);
|
类字段声明
公共和私有字段的正交信息组合。
class SampleClass { /* instead of: constructor() { this.publicID = 42; } */ publicID = 42; // public field
/* instead of: static get staticPublicField() { return -1 } */ static staticPublicField = -1;
// static private field static #staticPrivateField = 'private';
//private methods privateMethod() {}
// static block static { // executed when the class is created } }
|
私有字段的人体工程学brand检查
没有exceptions的brand检查:
class C { 井号brand;
井号method() {}
get 井号getter() {}
static isC(obj) { // in keyword to check return 井号brand in obj && 井号method in obj && 井号getter in obj; } }
|