先把数组想成超市货架:一整排小格子,每个格子都贴了编号。你把东西按编号放进去,要的时候报编号就能取出来。比如 5 个同学的名字,不用单独写 5 个箱子,全塞进这一排格子里就行。
今天学四件事:怎么摆货架、按编号取东西、货架有多长(length),以及一个新手必踩的坑——new Array(5) 货架是空的,并没有放东西 5 进去。
想象你要记 50 个同学的名字。不用数组,你得写 name1、name2……五十个单独的小盒子,找一个翻半天。数组就是一整排带编号的小格子:把相关的一堆东西,装进同一个变量,靠编号(术语叫「下标」)按位置找。
「下标」第一次出现,记住它:下标 = 格子的编号。「元素」也记一下:元素 = 格子里放的那个东西。一个数组能装什么都能装:数字、文字、真假、甚至另一排格子。
// 不用数组:5 个独立小盒子,名字各起各的,乱 let n1 = "张三"; // 小盒子1,装张三 let n2 = "李四"; // 小盒子2,装李四 let n3 = "王五"; // 小盒子3,装王五 // 用数组:一整排编号格子,一个变量装下所有人 let userList = ["张三", "李四", "王五"]; // 格子0 格子1 格子2 console.log(userList[0]); // 报编号0 → 取第1个格子 → "张三" console.log(userList[1]); // 报编号1 → 取第2个格子 → "李四" console.log(userList[2]); // 报编号2 → 取第3个格子 → "王五" // 一个格子里可以混着装:文字、数字、真假都行 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。
let arr = [10, 20, 30]; // 摆好:编号0=10, 编号1=20, 编号2=30 console.log(arr[0]); // 取编号0 → 10 console.log(arr[5]); // 摸编号5,没这格 → 给 undefined(空) console.log(arr[-1]); // 负数编号也不存在 → 还是 undefined
每个货架都自带一个小标签 .length,上面写着「现在有几个格子/几个东西」。你往里加一个、抽走一个,标签会自动跟着变。这个标签后面「遍历」时要反复用。
let arr = [10, 20, 30]; // 一开始有3个 console.log(arr.length); // 小标签写着 3 arr.push(40); // 末尾再加一个 40 console.log(arr.length); // 标签自动变成 4,不用你手动数
① 用在哪:购物车商品列表、学生成绩表、待办事项、下拉选项,都是数组装一排同类型数据。
② 常见坑:写成 new Array(5) 以为放了元素 5;下标写 arr[arr.length] 取到 undefined 还往下算。
③ 怎么解决:一律用 [] 字面量创建;取之前先看 length,下标范围是 0 ~ length-1。