JavaScript 作为现在最流行的语言之一,其不断发展的生态系统中也时常出现新的功能和特性,ECMAScript 2020 (ES2020) 中引入的新对象 methods 是其中之一。这些新的方法可以更好地处理数据,简化代码,并帮助开发人员更好地理解 JavaScript 语言。本文将介绍 ES2020 中的新对象 methods,并展示如何使用它们,提升代码质量和程序员效率。
1. Object.hasOwn()
在过去,我们通常使用 in 操作符来检查对象是否拥有某个属性。例如,我们可以使用以下代码来检查对象 obj 是否有一个名为 key 的属性:
if ("key" in obj) { // 执行某些代码 }
但是 in 操作符并不能判断一个属性是否是对象本身的属性,它可以检查继承自原型链上的属性。这是 Object.hasOwn() 方法发挥作用的地方,它检查给定对象是否具有指定的属性,返回一个布尔值。
以下是 Object.hasOwn() 的语法:
Object.hasOwn(obj, prop);
其中:
- obj:必需,要检查的对象。
- prop:必需,要检查的属性名称。
示例代码:
const obj = {name: 'Amy', age: 18}; console.log(Object.hasOwn(obj, 'name')); // true console.log(Object.hasOwn(obj, 'Sex')); // false
2. Object.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptors() 方法是一个静态方法,它返回指定对象所有自有属性描述符的对象。它主要与 Object.defineProperties() 方法搭配使用,可以快速复制一个对象的所有属性描述符到另一个对象。
以下是 Object.getOwnPropertyDescriptors() 方法的语法:
Object.getOwnPropertyDescriptors(obj);
示例代码:
const obj1 = {name: 'Amy', age: 18}; const obj2 = {}; Object.defineProperties(obj2, Object.getOwnPropertyDescriptors(obj1)); console.log(Object.getOwnPropertyDescriptor(obj2, 'name')); // {value: "Amy", writable: true, enumerable: true, configurable: true}
3. Object.fromEntries()
Object.fromEntries() 方法接受一个键值对的列表,并返回一个具有这些键值对的新对象。
以下是 Object.fromEntries() 方法的语法:
Object.fromEntries(iterable);
其中:
- iterable:必需,可迭代对象,其元素格式必须为 [key,value] 形式的数组列表。
示例代码:
const arr = [['name', 'Amy'], ['age', 18]]; const obj = Object.fromEntries(arr); // {name: "Amy", age: 18}
4. String.matchAll()
String.matchAll() 方法返回一个迭代器,可以按顺序迭代所有与正则表达式匹配的字符串的所有匹配项。返回的值包括捕获组,而 match() 方法只返回第一个匹配的字符串。
以下是 String.matchAll() 方法的语法:
str.matchAll(regexp);
其中:
- regexp:必需,用来与字符串进行匹配的正则表达式。
示例代码:
const str = "Hello everyone, my name is Amy. I am 18 years old. Nice to meet you!"; const regex = /[a-z]+/g; const matches = str.matchAll(regex); for (const match of matches) { console.log(match); }
5. Promise.allSettled()
Promise.allSettled() 方法接受一个 promise 对象的数组(或任何可迭代对象),并且在所有 promise 对象都已解决时返回一个数组,其中包含每个 promise 的解决值或拒绝原因的对象。与 Promise.all() 不同的是,Promise.allSettled() 不会短路(快速失败)并在至少一个 promise 拒绝时立即拒绝,它会始终等到所有 promise 都已解决。
以下是 Promise.allSettled() 的语法:
Promise.allSettled(iterable);
其中:
- iterable:必需,promise 对象的数组(或任何可迭代对象)。
示例代码:
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------- - ------------------ ---------------- ---- --------- ----- -------- - --- ----------------- ------- -- ------------------- ----- -------- ----------------------------- --------- ---------- ------------- -- ---------------------- -- ----------------------------- -- ----------- -- ---------- -- -----------
结论
ES2020 中引入的新对象 methods 使 JavaScript 更易上手,简化了许多常见的操作,提高了开发人员的效率。我们希望本文可以帮助您了解这些方法并为您实践提供指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671cc92c9babaf620fb27c9e