变量作用域的问题:
- 循环次数已经的时候 for循环比较方便
 - 循环次数未知的使用while,或者 do…….while更方便
 
4.2-day5-js数组
一、数组
目标:掌握数组,把一堆数据有序管理起来
学习路径:
- 数组是什么
 - 数组的基本使用
 - 遍历数组
 - 数组和对象的说明
 - 数组方法
 
1.1 数组是什么
目标:能说出数组是什么
- 数组(Array)是一种可以按顺序保存数据的数据类型
 为什么要数组?
- 思考:如果我想保存一个班里5个人的姓名怎么办?
 - 如果有多个数据可以用数组保存起来
 
<script>//数组(Array)是一组有序的数据的集合,数组里边看可以保存任意的数据类型//数组管理数据用编号来管理,下标(索引)//声明数组 let 数组名={数据1,数据2,......,数据n}//索引(下标) 0 1 2 3let names = ['小蜜瓜', '小米', '小白', '小黑']//读取数组中的元素,数组明[下标]document.write(names[0])document.write(names[3])</script>
1.2 数组的基本使用
目标:能够声明数组并且能够获取里面的数据
声明语法
- let 数组名 =[数组1,数组2,…….,数据n ]
 
例
- let names = [‘小明’,’小刚’,’小红’,‘小路’,‘小米’ ]
 - 数组是按顺序保存,所以每个数据都有自己的编号
 - 计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推
 - 在数组中,数据的编号也叫
索引或下标 - 数组可以存储任意类型的数据
 
案例://定义一个数组,里边存放星期一 —— 星期日,在控制打印星期日let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']let day = week[6]console.log(day)
4.一些特点:
- 数组声明完了后,也可以通过下标动态添加数组元素
 
<script>let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']//数组明.length 数组的长度(数组里边元素的个数)//console.log(week.length);//动态的添加数组元素, 数组名[索引值] = 值week[7] = '小徒弟'//相同的索引,回覆盖掉// week[3] = '西红柿'console.log(week)console.log(week.length);</script>
1.3遍历数组
目标:能够遍历输出数组里面的元素
遍历数组:
用循环把数组中每个元素都访问到,一般会用for循环遍历
for(let i = 0; i<数组名.lenght;i++ ){数组名[i]}
遍历数组://数组遍历 就是将数组中的每个元素读取出来,for循环数组遍历let week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日', '哈哈哈', '到达']console.log(week.length);//数组长度永远比最大的索引值大1for (let i = 0; i <= week.length; i++) {console.log(week[i]);}
课堂案例:
//案例:求数组所有元素的和,把数组里边的每一个元素累加到sum里面let arr = [2, 6, 1, 7, 4]//1.声明一个求和的变量 sumlet sum = 0//2.循环遍历数组,把数组里边的for (let i = 0; i <= arr.length; i++) {// sum =sum+arr[i]sum += arr[i]}document.write(`数组的和:${sum}<br>`)//3.用求和的结果sum/数组元素个数(arr.length)document.write(sum / arr.length)--------------------------------------------------------------------------用函数就行封装://求数组所有元素的和,以及平均值//1.实参和形参 2.功能//形参接受的数组function getSum(arr) {let sum = 0for (let i = 0; i < arr.length; i++) {sum += arr[i]}let avg = sum / arr.length//返回值是一个数组return [sum, avg]}let res = getSum(num)console.log(res);//打印输出let res1 = getSum(num1)document.write(res1)
1.4 数组和对象的说明
目标:能够遍历输出对象里面的元素
数组也属于对象类型
数组返回的数据类型是 object
对象也可以通过 [ ] 访问属性值
对象也可以被遍历
//数据也属于对象类型 objectlet arr = [1, 2, 3]//对象由属性和方法组成let obj = {//键值对 一对数据,通过不同的方式连在一起//键名 值//key valueuname: '王浩',age: '21'}
遍历对象
- 一般不用这种方式遍历数组、主要是用来遍历对象
 - 一定记住: k 是获得对象的属性名, 对象名[k] 是获得 属性值
//遍历对象 访问对象的每一个属性(属性值)for (let key in obj) {//获取属性console.lof(key);// 获取属性值 对象名[key] 注意key不要加引号console.log(obj[key]);}//访问对象的属性console.log(obj.uname);console.log(obj['age'])
 
1-1随机点名案例:
<script>//随机点名//1.声明数组let arr = ['毛毛', '大猫', '二狗子', '三毛', '小李子', '李富贵', '大黄', '悟空']// 核心需求 就是将索引值 变成随机整数// 生成[0,1]的随机数, 需求[0,8]的随机数let i = Math.floor(Math.random() * arr.length)document.write(arr[i])</script>
1-2遍历数据:
let students = [{ name: '小红',age: 18,sex: '女',hometown: '河北'},{ name: '小绿',age: 22,sex: '男', hometown: '河南'},{name: '小青',age: 220,sex: '女',hometown: '峨眉山' },{name: '素贞', age: 520,sex: '女',hometown: '青城山'}]for (let i = 0; i <= students.length; i++) {//students[i] 获取数组中每一个对象元素, students[i].name 获取对象中name的属性console.log(students[i].name)}
1.5 数组方法
目标:能使用数组方法对数组进行添加删除元素操作
数组做为对象数据类型,不但有 length 属性可以使用,还提供了许多方法
- push() 动态向数组的尾部添加一个单元
 - unshift() 动态向数组头部添加一个单元
 - pop() 删除最后一个单元
 - shift() 删除第一个单元
 splice() 动态删除任意单元
- splice(从那里位置开始删,删除多少个)
 
let arr = ['好好', '信息', '加啊', '小宝', '撒娇大']console.log(arr);// 数组名 .push(数据) 动态的向数组的末尾添加元素arr.push('阿瑟将军艾森')// 数组名 .unshift(数据) 动态的向数组的头部添加元素arr.unshift('小牙印')// 数组名.(数据) 删除数组的最后一个元素arr.pop()// 数组名 .() 删除数组的第一个元素arr.shift()console.log(arr);// 数组名 .splice(索引值,删除的个数) 从索引值的元素开始删除arr.splice(1, 2)
1-3案例-求数组成绩的最高分
//求最高分 和 平均分let arr = [15, 87, 179, 94, 90, 200, 30]// 假设第1个元素是最大值let max = arr[0]let sum = 0for (let i = 0; i < arr.length; i++) {// 如果max 比后边的元素小 就是trueif (max < arr[i]) {//将后边最大的元素赋值给 maxmax = arr[i]}//求和sum += arr[i]}console.log(`最高分:${max},平局分是${sum / arr.length},总分:${sum}`)
数组小结
目标:掌握数组,把一堆数据有序管理起来
数组是什么
- 可以按顺序保存数据的数据类型
 
数组的基本使用
- 主要以中括号作为符号
 
遍历数组
- 用for循环遍历
 
数组和对象的说明
- 数组也是对象
 - 数组有length属性和一些方法
 - 用for…in可以遍历对象
 
- 数组的案例
 
二、最终案例
1-4案例:计算[2,6,18,15,40] 中能被3整除的偶数的个数
//练习6:计算[2,6,18,15,40] 中能被3整除的偶数的个数let arr = [2, 6, 18, 15, 40]let count = 0for (let i = 0; i < arr.length; i++) {if (arr[i] % 3 === 0 && arr[i] % 2 === 0) {count++}}document.write(count)
1-5案例:给一个数字数组,该数组中由很多数字0,将不为0的数据存入到一个新的数组中*
//练习7:给一个数字数组,该数组中由很多数字0,将不为0的数据存入到一个新的数组中let num = [0, 12, 3, 6, 0, 7, 65, 34]//声明一个新数组let newArr = []for (let j = 0; j < num.length; j++) {if (num[j] !== 0) {//将老数组里边不为的元素,添加到新数组里边newArr.push(num[j])}}console.log(`新的元素:${newArr}`)
三、术语解释
目标:知道一些术语,让自己更专业
| 术语 | 解释 | 举例 | 
|---|---|---|
| 关键字 | 在JavaScript中有特殊意义的词汇 | let、var、function、if、else、switch、case、break | 
| 保留字 | 在目前的JavaScript中没意义,但未来可能会具有特殊意义的词汇 | int、short、long、char | 
| 标识(标识符) | 变量名、函数名的另一种叫法 | 无 | 
| 表达式 | 能产生值的代码,一般配合运算符出现 | 10 + 3、age >= 18 | 
| 语句 | 一句代码也称之为一条语句,一般按用途还会分类:输出语句、声明语句、分支语句 | 无 | 
