数组就是一排带编号的小箱子,一个变量存多个值,编号从 0 开始。
核心三步:
① 创建——let arr = [1,2,3] 或 new Array()
② 取值——arr[0] 拿第一个
③ 改值——arr[0] = 10 改第一个
坑:下标从 0 不是 1、arr.length 拿长度、越界取值得 undefined 不报错。
今天学四件事:怎么摆货架、按编号取东西、货架有多长(length),以及一个新手必踩的坑——new Array(5) 货架是空的,并没有放东西 5 进去。
想象你要记 50 个同学的名字。不用数组,你得写 name1、name2……五十个单独的小盒子,找一个翻半天。数组就是一整排带编号的小格子:把相关的一堆东西,装进同一个变量,靠编号(术语叫「下标」)按位置找。
「下标」第一次出现,记住它:下标 = 格子的编号。「元素」也记一下:元素 = 格子里放的那个东西。一个数组能装什么都能装:数字、文字、真假、甚至另一排格子。
// 不用数组:5 个独立小盒子,名字各起各的,乱 // 小盒子1,装张三 let n1 = "张三"; // 小盒子2,装李四 let n2 = "李四"; // 小盒子3,装王五 let n3 = "王五"; // 用数组:一整排编号格子,一个变量装下所有人 // 格子0 格子1 格子2 let userList = ["张三", "李四", "王五"]; // 报编号0 → 取第1个格子 → "张三" console.log(userList[0]); // 报编号1 → 取第2个格子 → "李四" console.log(userList[1]); // 报编号2 → 取第3个格子 → "王五" console.log(userList[2]); // 一个格子里可以混着装:文字、数字、真假都行 // 名字、价格、是不是包邮,全塞一起 let goods = ["手机", 2999, true];
摆货架有两种写法。日常开发 99% 用第二种 [] 中括号,又短又清楚。第一种 new Array 知道有这么个东西就行,几乎不用。
// 写法1:new Array(知道即可,实际很少用) // 空货架,啥也没放 let arr1 = new Array(); // 一上来就摆好三个东西 let arr2 = new Array(10, 20, "张三"); // 写法2:中括号 [](推荐!日常都这么写) // 空货架 let arr3 = []; // 直接摆好三个东西 let arr4 = [10, 20, 30];
如果你写 new Array(5),以为货架里放了一个东西叫 5,就会踩坑。因为「只塞一个数字」时,JS 把这个数字当成了货架的格子数量,而不是要放进去的东西。结果就是:货架有 5 个空格子,里面啥也没有。而中括号 [5] 才是真的放了一个东西叫 5。这就是为什么推荐用 []——不会搞混。点下面按钮对比看看。
注意!货架编号从 0 开始,不是从 1。3 个东西编号是 0、1、2。如果你伸手去摸一个不存在的编号(比如第 5 号),JS 不会「叮」地报错提醒你,而是默默塞给你一个 undefined(空)。
如果你以为取错编号会报错,就会被坑。因为 JS 不报错,悄悄给你一个 undefined,后面代码还傻乎乎往下跑,bug 藏得很深。所以越界取不到东西,拿到的就是 undefined。
// 摆好:编号0=10, 编号1=20, 编号2=30 let arr = [10, 20, 30]; // 取编号0 → 10 console.log(arr[0]); // 摸编号5,没这格 → 给 undefined(空) console.log(arr[5]); // 负数编号也不存在 → 还是 undefined console.log(arr[-1]);
每个货架都自带一个小标签 .length,上面写着「现在有几个格子/几个东西」。你往里加一个、抽走一个,标签会自动跟着变。这个标签后面「遍历」时要反复用。
// 一开始有3个 let arr = [10, 20, 30]; // 小标签写着 3 console.log(arr.length); // 末尾再加一个 40 arr.push(40); // 标签自动变成 4,不用你手动数 console.log(arr.length);
① 用在哪:购物车商品列表、学生成绩表、待办事项、下拉选项,都是数组装一排同类型数据。
② 常见坑:写成 new Array(5) 以为放了元素 5;下标写 arr[arr.length] 取到 undefined 还往下算。
③ 怎么解决:一律用 [] 字面量创建;取之前先看 length,下标范围是 0 ~ length-1。
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| [] | 中括号字面量创建数组,日常都用它 | 元素列表 | 新数组 | let nums = [10, 20, 30]; |
| new Array() | 另一种创建数组写法,少用;传一个数字是指格子数 | 元素或个数 | 新数组 | let arr = new Array(10, 20, 30); |
| arr[i] | 按编号(下标)取格子里的东西 | 编号 | 该元素,越界给 undefined | let first = nums[0]; // 10 |
| arr.length | 数格子个数的小标签,自动更新 | 无 | 元素个数 | let n = nums.length; // 3 |