在现代JavaScript编程中,ES6(ECMAScript 2015)引入了许多令人兴奋的新功能和语法,其中一些可能相对较冷门,但却非常实用。本文将深入探讨一些不太为人熟知却极具实际价值的高级技巧,为你展示如何利用这些功能提高代码的可读性和效率。
1. Object.entries() 和 Object.fromEntries()
使用场景:
- 对象转为数组: 当需要对对象的键值对进行遍历、过滤或其他数组操作时。
- 数组转为对象: 当从数组形式的键值对中还原对象时。
示例代码:
// 对象转为数组
const myObject = { a: 1, b: 2, c: 3 };
const entriesArray = Object.entries(myObject);
console.log(entriesArray);
// 输出: [['a', 1], ['b', 2], ['c', 3]]
// 数组转为对象
const newObj = Object.fromEntries(entriesArray);
console.log(newObj);
// 输出: { a: 1, b: 2, c: 3 }
2. Symbol类型和Symbol属性
使用场景:
- 创建唯一标识符: 当需要确保对象属性的唯一性时,使用Symbol作为属性名。
示例代码:
const mySymbol = Symbol('description');
const myObject = {
[mySymbol]: 'This is a Symbol property'
};
console.log(myObject[mySymbol]);
// 输出: This is a Symbol property
3. WeakMap 和 WeakSet
使用场景:
- 存储临时数据: 当需要存储对象且不希望阻止其被垃圾回收时。
示例代码:
let weakMap = new WeakMap();
const obj = {};
weakMap.set(obj, 'value');
console.log(weakMap.get(obj));
// 输出: value
4. Promise.allSettled()
使用场景:
- 并行异步操作: 当需要等待一组Promise全部完成,而不受其中任何一个Promise的拒绝影响。
示例代码:
const promises = [
Promise.resolve('Resolved'),
Promise.reject('Rejected'),
Promise.resolve('Another Resolved')
];
Promise.allSettled(promises)
.then(results => console.log(results));
// 输出: [{status: "fulfilled", value: "Resolved"}, {status: "rejected", reason: "Rejected"}, {status: "fulfilled", value: "Another Resolved"}]
5. BigInt
使用场景:
- 处理大数字: 当需要进行精确的大数计算时,避免JavaScript中整数范围的限制。
示例代码:
const bigNumber = 9007199254740991n + 1n;
console.log(bigNumber);
// 输出: 9007199254740992n
6. Array.of 和 Array.from
使用场景:
- 创建数组:
Array.of
用于创建具有可变参数的新数组。 - 从类数组对象或可迭代对象创建数组:
Array.from
用于将类数组对象或可迭代对象转换为数组。
示例代码:
// 创建数组
const newArray1 = Array.of(1, 2, 3);
console.log(newArray1);
// 输出: [1, 2, 3]
// 从类数组对象创建数组
const arrayLike = { length: 3, 0: 'a', 1: 'b', 2: 'c' };
const newArray2 = Array.from(arrayLike);
console.log(newArray2);
// 输出: ['a', 'b', 'c']
7. Array.prototype.at 和 Array.prototype.flat
使用场景:
- 直接访问数组元素:
Array.prototype.at
允许通过索引直接访问数组元素。 - 嵌套数组扁平化:
Array.prototype.flat
用于将嵌套数组扁平化。
示例代码:
// 直接访问数组元素
const myArray = ['a', 'b', 'c'];
console.log(myArray.at(1));
// 输出: b
// 嵌套数组扁平化
const nestedArray = [1, [2, 3], [4, [5, 6]]];
const flattenedArray = nestedArray.flat(2);
console.log(flattenedArray);
// 输出: [1, 2, 3, 4, 5, 6]