# JavaScript怎么创建数组 数组是JavaScript中最基础且强大的数据结构之一,用于存储有序的元素集合。本文将详细介绍7种创建数组的方法,并分析它们的适用场景和注意事项。 ## 1. 数组字面量(最常用) ```javascript // 空数组 const arr1 = []; // 带初始值的数组 const arr2 = [1, 'text', true, {name: 'John'}]; // 多维数组 const matrix = [ [1, 2, 3], [4, 5, 6] ];
特点: - 简洁直观,90%场景的首选 - 可包含任意数据类型 - 推荐使用const
声明避免意外修改
// 创建空数组(等效于[]) const arr1 = new Array(); // 创建指定长度的空数组 const arr2 = new Array(5); // [empty × 5] // 创建带元素的数组 const arr3 = new Array(1, 2, 3); // [1, 2, 3]
注意事项: - 单数字参数会创建空槽数组而非[5]
- 可读性较差,现代代码中较少使用 - 可能被误用导致意外行为
const arr1 = Array.of(5); // [5] const arr2 = Array.of(1,2,3); // [1,2,3]
优势: - 解决构造函数的单参数陷阱 - 语义更明确 - 适合需要明确区分长度和元素的场景
// 从类数组对象转换 const strArr = Array.from('hello'); // ['h','e','l','l','o'] // 从Set转换 const set = new Set([1,2,3]); const setArr = Array.from(set); // [1,2,3] // 带映射函数 const doubled = Array.from([1,2,3], x => x*2); // [2,4,6]
典型应用场景: - DOM节点集合转换:Array.from(document.querySelectorAll('div'))
- 函数arguments对象转换 - 任何实现了iterable
协议的对象
// 合并数组 const arr1 = [1, 2]; const arr2 = [...arr1, 3, 4]; // [1,2,3,4] // 转换可迭代对象 const strArr = [...'hello']; // ['h','e','l','l','o'] // 复制数组(浅拷贝) const original = [1,2,3]; const copy = [...original];
优势: - 语法简洁 - 支持任何可迭代对象 - 适合数组浅拷贝和合并操作
// 创建并填充5个0的数组 const zeros = new Array(5).fill(0); // [0,0,0,0,0] // 填充对象需要注意引用问题 const objArr = new Array(3).fill({}); // 三个元素指向同一对象
注意事项: - 对于引用类型会填充相同引用 - 适合初始化基本类型数组 - 常与Array(n)
结合使用
const indexArr = [...Array(5).keys()]; // [0,1,2,3,4]
const seq = Array.from({length: 5}, (_,i) => i+1); // [1,2,3,4,5]
function range(start, end) { return Array.from({length: end-start+1}, (_,i) => start+i); } range(3,7); // [3,4,5,6,7]
方法 | 创建耗时(100万次) |
---|---|
字面量 [] | 15ms |
Array(n) | 20ms |
Array.of() | 25ms |
Array.from() | 120ms |
[]
在大多数情况下都是最佳选择new Array(n).fill(value)
Array.from()
或扩展运算符Array.of()
替代new Array()
Q:new Array(5)
和[undefined,undefined,undefined]
的区别? A:前者创建的是空槽数组(sparse array),后者是实际包含undefined值的数组。map()
等方法会跳过空槽。
Q:如何检测数组? A:使用Array.isArray(arr)
,比instanceof
更可靠。
Q:如何创建不重复的随机数数组?
const uniqueRandom = Array.from({length: 10}, () => Math.floor(Math.random()*100)).filter((v,i,a) => a.indexOf(v) === i);
掌握这些数组创建方法,将帮助你更高效地处理JavaScript中的集合数据。根据具体场景选择合适的方法,可以使代码更简洁且性能更优。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。