极简三分钟ES6 - 数组的扩展

31 阅读1分钟

扩展运算符 ...:拆箱神器

作用:将数组“拆包”成独立元素,类似拆快递箱直接取物品

// 合并数组 
const fruits = ["🍎", "🍌"];
const veggies = ["🥕", "🥦"];
const food = [...fruits, ...veggies]; // ["🍎", "🍌", "🥕", "🥦"]
 
// 函数传参 
function add(a, b, c) { return a + b + c; }
const nums = [1, 2, 3];
add(...nums); // 6(自动拆解为 add(1, 2, 3))
 
// 复制数组(避免引用陷阱)
const arr = [10, 20];
const arrCopy = [...arr]; // 全新数组,修改 arrCopy 不影响 arr 

关键点:简化数组合并、复制和函数调用,替代传统 concat() 和 apply()

Array.from() :类数组转正

作用:将伪数组(如 DOM 节点列表、字符串)转为真数组。

// DOM 节点转数组操作 
const divs = document.querySelectorAll("div"); 
const divArray = Array.from(divs);  // 现在可用数组方法(如 map、filter)
 
// 字符串转字符数组 
Array.from("ES6");  // ["E", "S", "6"]
 
// 搭配映射函数 
Array.from([1,  2, 3], x => x * 2); // [2, 4, 6]

场景:处理无法直接调用数组方法的类数组对象

Array.of() :解决构造器坑

问题new Array(3) 创建长度为 3 的空数组

Array.of(3);  // [3](直接创建含元素 3 的数组)
Array.of(1,  "a", true); // [1, "a", true]

优势:避免 new Array() 的参数歧义

fill():批量填充数组

作用:快速初始化或覆盖数组值

// 初始化长度为 3、值全为 0 的数组 
const arr = new Array(3).fill(0); // [0, 0, 0]
 
// 替换部分元素 
const nums = [1, 2, 3, 4];
nums.fill(9,  1, 3); // [1, 9, 9, 4](索引 1-2 被替换)

注意:会修改原数组

includes():包含判断

解决痛点:传统 indexOf() 无法检测 NaN

[1, NaN, 3].includes(NaN); // true 
[1, 2, 3].includes(2); // true 
[1, 2, 3].includes(4); // false 

优势:语义更清晰,支持 NaN 识别

牢记

“扩展符拆箱,from 转正忙;find 精准查,fill 填满仓;includes 验包含,遍历不用慌!”