一、数组基础
1. 数组定义:数组是一系列有序数据的集合,例如:[1,2,'true','good']
2. 数组的数据类型:
(1)基本数据类型:number/string/boolean/undefined/null
(2)复杂数据类型:Object/Function/Array/...
3. 创建数组有两种方式
<script>
// 字面量方式创建数组
//创建一个空数组
var arr = [];
//创建有内容的数组
var arr = [12, 23, 'good', 'true'];
//通过构造函数方式创建数组
//创建空数组
var arr = new Array();
//创建一个有规定长度为5的数组
var arr = new Array(5);
//创建有内容的数组
var arr = new Array(12, 23, 'morning', 'toxic');
</script>
4. 数组长度(length),length表示的是数组中元素的数量
5. 数组索引(通常使用index表示),也叫作下标,表示元素在数组里面所处的位置序数,索引是从0开始计数,第一个元素的索引是0,往后一次递增:
<script>
var arr = [45, 66, 'hello'];//数组长度(length)为3
// 输出
console.log(arr[0]);//45
console.log(arr[1]);//66
console.log(arr[2]);//hello
</script>
6. 数组遍历
(1)根据数组中的索引来获取数组内容
(2)利用for循环,设置初始值为数组初始值0,终止值为数组长度或者等于数组长度-1,专业语言也叫遍历:
7. 辅助理解案例:
(1)
<script>
// 现有5名学生,语文成绩分别是98,87,95,89,77分,请定义一个成绩数组存储学生成绩并遍历输出
var arr = [98, 87, 95, 89, 77];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
// 求5名学生总成绩?
var sumScore = 0;
for (var i = 0; i < arr.length; i++) {
sumScore += arr[i];
}
console.log(sumScore);
// 求大于平均分的学生成绩?
var average = sumScore / arr.length;
console.log(average);
</script>
(2)
<script>
// 有一个存储两个数的数组[3,6]写程序交换数组元素,输出[6,3]
var arr = [3, 6];
var temp = arr[0];
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
console.log(arr);
</script>
(3)
<script>
/***
* 1. 创建一个学生成绩数组,存储所有学生的数学成绩,分别是 89,78,90,99,67,59
2. 求所有学生中分数最高的学生成绩,打印输出到界面
*/
var stuArr = [89, 78, 90, 99, 67, 59];
var max = 0;
for (var i = 0; i < stuArr.length; i++) {
if (stuArr[i] > max) {
max = stuArr[i];
}
}
console.log('最高成绩:' + max);
// 3. 求所有学生中分数最低学生成绩,打印输出到界面
var stuArr = [89, 78, 90, 99, 67, 59];
var min = stuArr[0];
for (var i = 0; i < stuArr.length; i++) {
if (stuArr[i] < min) {
min = stuArr[i];
}
}
console.log('最低成绩:' + min);
// 4. 求不及格的学生有几个,打印输出到界面
for (var i = 0; i < stuArr.length; i++) {
if (stuArr[i] < 60) {
console.log(stuArr[i]);
}
}
</script>
二、数据类型之间存储的区别
1. 存储空间分为两种:栈和堆:

2. 栈:主要存储数据类型的内容
3. 堆:主要存储复杂数据类型的类容
4. 数据类型之间的比较:
(1)基本数据类型之间是比较数据的值
(2)复杂数据类型之间是比较数据存储的地址 
三、函数参数的的传递
基本数据类型和复杂数据类型的区别:
1. 因为复杂数据类型,变量存储的是地址,真实内容在堆空间内存储,所以赋值的时候相当于把obj存储的地址复制了一份给obj2变量;之后obj与obj2两个变量的地址一样,同时指向同一个堆内存空间,所以使用obj2这个变量修改空间的内容,obj指向的空间也会改变:


四、数组的常用方法
1. push():是用来在数组的末尾添加一个元素:

2. pop():是用来删除数组最后一个元素:

3. unshift() :是在数组最前面添加一个元素:
4. shift():删除数组最前面的一个元素:

5. splice():是按照数组的索引来截取数组的某些内容:
(1)语法:splice(开始索引,截取数量,替换的元素),通常不写替换的元素:
6. reverse():用来反转数组:

7. sort():给数组排序(按照字典顺序排序):arr.sort(function(a,b){ return a - b })
8. concat():是把多个数组进行拼接,拼接后不会改变原始数组,而是返回一个新的数组:
9. join():是把数组里面所有的内容连接起来,变成一个字符串,同时自己定义字符串间的连接符号,返回时不会改变原始数组,返回一个新的字符串:
10. slice():返回一个新的数组对象,对象是由begin和end决定的原数组的部分拷贝,(包括begin,不包括end),原始数组不会改变:
11. indexOf():

12. includes():用于检测数组是否包含某个元素:
五、ES5常用的数组遍历方法
1. forEach():作用相当于for循环,同样是用于遍历数组,语法:arr.forEach(function(item,index,arr){}):
2. map():和forEach类似,只是他可以对数组中的每一项进行操作,然后返回一个新的数组:
3. filter():和map()的使用类似,是按照所给条件来筛选数组,把原始数组中的满足条件的筛选出来,组成一个新的数组并返回:

4. find():遍历数组,返回数组中第一个满足条件的元素:
5. every():判定数组中是否每个元素都满足指定条件,全部满足则返回true
6. some():判定数组中是否有元素满足指定条件,只要存在一个满足,就返回true
7. reduce():接受一个方法作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值:
练习:
<script>
//学生数组如下
var students = [
{ number: 1001, name: 'jack', score: 98, gender: '男' },
{ number: 1002, name: 'rose', score: 95, gender: '女' },
{ number: 1003, name: '小丽', score: 85, gender: '女' },
]
//找成绩大于平均分的所有学生
var sum = 0;
for (var i = 0; i < students.length; i++) {
sum += students[i].score;
}
var average = sum / students.length;
console.log(average);
for (var i = 0; i < students.length; i++) {
if (students[i].score > average) {
console.log(students[i].name);
}
}
// 找姓名是rose的学生并且性别是女的学生
for (var i = 0; i < students.length; i++) {
if (students[i].name == 'rose' && students[i].gender == '女') {
console.log(students[i]);
}
}
// 所有学生的总成绩,使用reduce方法
var sum = students.reduce(function (s, item, index) {
return s + item.score;
}, 0)
console.log(sum);
// 所有学生成绩减十分,返回到新数组中
var newArr = students.map(function (item, index) {
item.score = item.score - 10;
return item;
})
console.log(newArr);
// 所有学生中是否有女生
var flag = students.some(function (item, index) {
return flag = item.gender == '女';
});
if (flag == true) {
console.log('学生中有女生!');
} else {
console.log('学生中没有女生!');
}
// 所有学生中是否有不及格的学生
var flag = students.some(function (item, index) {
return flag = item.score < 60;
});
if (flag == true) {
console.log('学生中有不及格的学生!');
} else {
console.log('学生中没有不及格的学生!');
}
</script>
本文介绍了JavaScript中的数组基础知识,包括定义、数据类型、创建方式、数组长度、索引和遍历。通过实例展示了如何创建、遍历、操作数组,如交换元素、查找最高分和最低分等。此外,讨论了数据类型存储的区别、函数参数传递以及数组的常用方法,如push、pop、sort等。最后,通过示例展示了ES5数组遍历方法的应用,如forEach、map和reduce。
602

被折叠的 条评论
为什么被折叠?



