JavaScript: JavaScript 数组基础

最后更新:2026-10-13

数组就像一排编号的抽屉——每个抽屉有个编号(索引),里面放着东西(数据)。你可以按编号取东西、换东西、往后面加新东西。日常开发中,数组是你用得最多的数据结构。

相关数组方法:Array.isArray() unshift() forEach shift() filter push() reduce pop() map for...of typeof for

1. 什么是数组

数组是有序的数据集合,可以存放任意类型的数据:

HTML
<script>
let arr = [1, 'hello', true, null, undefined];
</script>

一个数组里可以混合不同类型,但实际开发中通常放同类型的数据,方便统一处理。


两种方式:

HTML
<script>
// 方式1:字面量(推荐,简洁直观)
let fruits = ['苹果', '香蕉', '橘子'];

// 方式2:Array 构造函数
let nums = new Array(1, 2, 3);
let empty = new Array(5);  // 创建长度为5的空数组,不是 [5]!
</script>
⚠️ 注意: new Array(5) 创建的是一个长度为 5 的空数组,不是包含数字 5 的数组!这个坑踩过的人不少,所以日常用字面量 [] 就好。


3. 访问元素

数组索引从 0 开始,不是从 1。第一个元素是 [0],第二个是 [1],依此类推:

HTML
<script>
let fruits = ['苹果', '香蕉', '橘子'];
fruits[0];   // '苹果'
fruits[1];   // '香蕉'
fruits[2];   // '橘子'
</script>

访问不存在的索引不会报错,返回 undefined:

HTML
<script>
fruits[5];   // undefined
</script>

4. length 属性

length 返回数组的长度(元素个数):

HTML
<script>
let arr = [10, 20, 30];
arr.length;   // 3
</script>

length 比 最大索引多 1,因为索引从 0 开始。最后一个元素的索引是 arr.length - 1。


5. 修改元素

直接通过索引赋值就能修改:

HTML
<script>
let fruits = ['苹果', '香蕉', '橘子'];
fruits[1] = '葡萄';  // 把'香蕉'改成'葡萄'
// ['苹果', '葡萄', '橘子']
</script>

也可以通过索引添加新元素(但不推荐,会产生空洞):

HTML
<script>
fruits[5] = '西瓜';
// ['苹果', '葡萄', '橘子', empty × 2, '西瓜']
</script>

▶ 示例:数组基本操作

▶ 试一试

6. 基本方法

数组最常用的增删方法:

方法 作用 返回值
push() 末尾添加元素 新长度
pop() 末尾删除元素 被删的元素
unshift() 开头添加元素 新长度
shift() 开头删除元素 被删的元素
HTML
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>数组方法</title></head>
<body>
<pre id="output"></pre>
<script>
let arr = ['a', 'b', 'c'];

arr.push('d');       // ['a','b','c','d']  返回 4
arr.pop();           // ['a','b','c']      返回 'd'
arr.unshift('z');    // ['z','a','b','c']  返回 4
arr.shift();         // ['a','b','c']      返回 'z'

document.getElementById('output').textContent = JSON.stringify(arr);
</script>
</body>
</html>
💡 提示: 记忆技巧:push/pop 操作尾部,unshift/shift 操作头部。p 开头的操作尾部,s 开头的操作头部。un 开头的加、不带的删。

▶ 示例:水果列表操作

▶ 试一试

7. 检测数组:Array.isArray() vs typeof

typeof 对数组返回的是 "object",无法区分数组和普通对象:

HTML
<script>
let arr = [1, 2, 3];
typeof arr;              // "object"  ← 没用!
Array.isArray(arr);      // true      ← 正确方式
</script>
⚠️ 注意: typeof 判断数组靠不住,始终用 Array.isArray()。


8. forEach 基本遍历

forEach 是遍历数组最常见的方法,比 for 循环更声明式:

HTML
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>forEach</title></head>
<body>
<pre id="output"></pre>
<script>
let fruits = ['苹果', '香蕉', '橘子'];
let result = '';
fruits.forEach(function(fruit, index) {
  result += index + ' ' + fruit + '\n';
});
document.getElementById('output').textContent = result;
</script>
</body>
</html>

用箭头函数更简洁:

HTML
<script>
fruits.forEach((fruit, index) => {
  console.log(index, fruit);
});
</script>

▶ 示例:forEach 遍历展示

▶ 试一试
⚠️ 注意: 高阶方法(map、filter、reduce 等)功能更强大,下一课专门讲。


相关数组方法:Array.isArray() unshift() forEach shift() filter push() reduce pop() map for...of typeof for

❓ 常见问题

Q push 和 unshift 的返回值是什么?
A 都返回数组的新长度,不是修改后的数组。很多人以为返回数组本身,结果 let arr = [1].push(2) 得到的是 2(长度),不是 [1, 2]。
Q forEach 里能用 break 跳出循环吗?
A 不能。forEach 没有 break 机制,想提前中断遍历请用传统 for 循环或 for...of + break。
Q 数组越界访问会报错吗?
A 不会。arr[100] 在越界时返回 undefined,不会抛异常。但这可能掩盖 bug,访问前最好检查索引范围。

📖 小节

📝 作业

  1. 创建一个数组存放 5 个城市名,用 forEach 在页面上列出每个城市的序号和名称
  2. 写一个"待办清单":可以输入任务添加到末尾,点击"完成"删除末尾任务,实时显示列表
  3. 写一个程序:让用户输入 5 个数字存入数组,计算并显示它们的总和和平均值
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏