当前位置: 首页 > article >正文

常用ES技巧二

文章目录

  • 一、`Object.entries()`和`Object.fromEntries()`
    • 1.1、`Object.entries()`
    • 1.2、`Object.fromEntries()`
  • 二、`Symbol`类型和`Symbol`属性
  • 三、`WeakMap`和`WeakSet`
  • 四、`Promise.allSettled()`
  • 五、`BigInt`
  • 六、`Array.of`和`Array.from`
  • 七、`.at`和`.flat`
  • 八、总结
  • 九、最后

一、Object.entries()Object.fromEntries()

  • Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组。
  • Object.fromEntries()方法将键值对列表转换为一个对象。

1.1、Object.entries()

当使用Object.entries()时,可以传入一个对象作为参数。这个对象可以是任何具有可枚举属性的对象。例如:

const obj = { a: 1, b: 2, c: 3 };

const entries = Object.entries(obj);
console.log(entries); // [["a", 1], ["b", 2], ["c", 3]]

在这个例子中,我们将一个包含三个属性的对象传递给Object.entries()方法,并将返回的结果存储在entries变量中。entries变量现在是一个包含键值对数组的数组。

1.2、Object.fromEntries()

当使用Object.fromEntries()时,可以传入一个键值对数组作为参数。这个数组中的每个元素都是一个包含键和值的数组。例如:

const entries = [["a", 1], ["b", 2], ["c", 3]];

const obj = Object.fromEntries(entries);
console.log(obj); // { a: 1, b: 2, c: 3 }

在这个例子中,我们将一个包含三个键值对的数组传递给Object.fromEntries()方法,并将返回的结果存储在obj变量中。obj变量现在是一个由键值对组成的对象。

二、Symbol类型和Symbol属性

  • Symbol是一种新的原始数据类型,用于创建唯一的标识符。

  • Symbol属性是对象中使用Symbol作为键创建的属性。

    const sym = Symbol('description');
    
    const obj = {
      [sym]: 'value'
    };
    
    console.log(obj[sym]); // value
    

三、WeakMapWeakSet

  • WeakMap是一种集合类型,其中键必须是对象,并且在没有其他引用时会被垃圾回收。

  • WeakSet是一种集合类型,其中元素必须是对象,并且在没有其他引用时会被垃圾回收。

    const wm = new WeakMap();
    
    const obj = {};
    
    wm.set(obj, 'value');
    
    console.log(wm.get(obj)); // value
    
    const ws = new WeakSet();
    
    ws.add(obj);
    
    console.log(ws.has(obj)); // true
    

    在这个例子中,我们创建了一个WeakMap和一个WeakSet实例。我们使用set()方法将obj对象添加到WeakMap中,并将值设置为value。然后,我们使用get()方法从WeakMap中获取值。类似地,我们使用add()方法将obj对象添加到WeakSet中,并使用has()方法检查集合中是否存在该对象。

四、Promise.allSettled()

  • Promise.allSettled()方法返回一个在所有给定的promise已被解析或被拒绝后决议的promise,并带有一个对象数组,每个对象表示对应的promise结果。
const promises = [
  Promise.resolve('resolved'),
  Promise.reject('rejected'),
  Promise.resolve('resolved')
];

Promise.allSettled(promises)
  .then(results => {
    console.log(results);
  })
  .catch(error => {
    console.error(error);
  });

 // 输出结果:
 // [
 //  { status: 'fulfilled', value: 'resolved' },
 //  { status: 'rejected', reason: 'rejected' },
 //  { status: 'fulfilled', value: 'resolved' }
 // ]

我们创建了一个包含三个promise的数组,并将其传递给Promise.allSettled()方法。然后,我们使用.then()方法处理返回的结果数组,或使用.catch()方法处理任何错误。

五、BigInt

  • BigInt是一种新的原始数据类型,用于表示任意精度的整数。
 const bigIntValue = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1);

 console.log(bigIntValue); // 9007199254740992n

六、Array.ofArray.from

  • Array.of()方法创建一个具有可变数量参数的新数组实例。
  • Array.of方法用于创建一个由参数组成的新数组。它与Array构造函数不同之处在于,当参数只有一个且为数字时,Array.of会创建一个只包含该数字的数组,而不是创建指定长度的空数组。
  • Array.from()方法从类似数组或可迭代对象创建一个新的数组实例。
  • Array.from方法将类似数组或可迭代对象转换为真正的数组。它可以接收第二个参数来进行映射或筛选操作。
const arr1 = Array.of(1, 2, 3);
console.log(arr1); // [1, 2, 3]

const str = 'Hello';
const arr = Array.from(str);
console.log(arr); // 输出: ['H', 'e', 'l', 'l', 'o']

const nums = [1, 2, 3, 4, 5];
const doubled = Array.from(nums, num => num * 2);
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

七、.at.flat

  • .at()方法返回指定索引处的元素。
  • .at方法用于获取数组指定索引位置的元素,支持负数索引。
  • .flat()方法将嵌套的数组扁平化为一个新的数组。
  • .flat方法用于将多维数组扁平化为一维数组,可以指定扁平化的层数。
 const arr3 = [1, 2, 3, 4, 5];
 console.log(arr3.at(2)); // 3

 const arr4 = [1, [2, [3]]];
 console.log(arr4.flat()); // [1, 2, [3]]

八、总结

ES6引入了许多实用但相对较冷门的高级技巧。Object.entries()Object.fromEntries()可以方便地在对象和键值对之间进行转换。Symbol类型和Symbol属性可以创建唯一的标识符。

WeakMapWeakSet提供了一种在没有其他引用时自动垃圾回收的集合类型。Promise.allSettled()可以处理多个promise并返回所有结果。BigInt允许表示任意精度的整数。Array.ofArray.from.atflat提供了更方便的数组操作方法。这些技巧可以帮助开发者更高效地编写代码。

九、最后

本人每篇文章都是一字一句码出来,希望大佬们多提提意见。顺手来个三连击,点赞👍收藏💖关注✨。创作不易,给我打打气,加加油☕


http://www.kler.cn/a/231477.html

相关文章:

  • Visual Studio使用GitHub Copilot提高.NET开发工作效率
  • 【微服务与分布式实践】探索 Sentinel
  • 2025美赛数学建模MCM/ICM选题建议与分析,思路+模型+代码
  • 2025 = 1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3
  • AI大模型开发原理篇-2:语言模型雏形之词袋模型
  • Python3 【函数】:见证算法的优雅与力量
  • Transformer实战-系列教程11:SwinTransformer 源码解读4(WindowAttention类)
  • 算法学习打卡day47|单调栈系列题目
  • Android 11 访问 Android/data/或者getExternalCacheDir() root方式
  • FTX重启“梦碎”,FTT沦为“空气币”
  • 03 动力云客项目之登录功能后端实现
  • Excel——合并计算
  • Adb offline疑难杂症解决方案大全记录
  • 第十三、十四个知识点:用javascript获取表单的内容并加密
  • Jenkins(本地Windows上搭建)上传 Pipeline构建前端项目并将生成dist文件夹上传至指定服务器
  • 代码随想录算法训练营第五十八天 | 739. 每日温度、496. 下一个更大元素 I
  • 14 归并排序和其他排序
  • ASP.NET Core MVC 控制查询数据表后在视图显示
  • 【Linux开发工具】yum命令详解
  • STM32/C51开发环境搭建(KeilV5安装)
  • SQL注入微境界
  • Docker Compose实例
  • javaEE - 20( 18000字 Tomcat 和 HTTP 协议入门 -1)
  • Python||数据分析与可视化_使用折线图分析各个城市的P.M.2.5月度差异情况(下)及使用堆叠柱状图对各个城市的PM2.5日均值情况进行数据分析与可视化
  • CTFshow web(命令执行29-36)
  • 【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)