文章目录
- 一、`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
三、WeakMap
和WeakSet
-
WeakMap
是一种集合类型,其中键必须是对象,并且在没有其他引用时会被垃圾回收。 -
WeakSet
是一种集合类型,其中元素必须是对象,并且在没有其他引用时会被垃圾回收。const wm = new WeakMap();const obj = {};wm.set(obj, 'value');console.log(wm.get(obj)); // valueconst 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.of
和Array.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)); // 3const arr4 = [1, [2, [3]]];console.log(arr4.flat()); // [1, 2, [3]]
八、总结
ES6
引入了许多实用但相对较冷门的高级技巧。Object.entries()
和Object.fromEntries()
可以方便地在对象和键值对之间进行转换。Symbol
类型和Symbol
属性可以创建唯一的标识符。
WeakMap
和WeakSet
提供了一种在没有其他引用时自动垃圾回收的集合类型。Promise.allSettled()
可以处理多个promise并返回所有结果。BigInt
允许表示任意精度的整数。Array.of
、Array.from
、.at
和flat
提供了更方便的数组操作方法。这些技巧可以帮助开发者更高效地编写代码。
九、最后
本人每篇文章都是一字一句码出来,希望大佬们多提提意见。顺手来个三连击,点赞👍收藏💖关注✨。创作不易,给我打打气,加加油☕