一、什么是数组
1、数组的概念:
引用类型的对象
2、数组的本质:
数组是被等分成许多小块的连续内存段,每个小块都与一个整数关联,可以通过该整数快速访问对应的小块。
3、JavaScript中数组的特点
JavaScript数组可以存放任意类型的数据,所以说JavaScript中数组几乎等于对象。
二、JavaScript中数组与对象
在JavaScript中数组几乎等于对象,他们仅有四处不同。
1、数组有一个神奇的length属性。该属性并不是指数组中元素的数量,而是指数组元素的最高序数加1。这种神奇的设定可以让JavaScript数组假装自己“真的是数组”,从而让他可以被for语句处理。而对象仅能使用for...in语句处理。
2、数组对象都继承自Array.portotype,该原型比Object.portotype多了一些更实用的函数。
3、数组与对象的写法不同。
4、数组的数据没有”名称”,但是有对应的索引;对象的数据有”名称”(属性名),而对象因为是无序数据的集合,所以不存在索引。
三、JavaScript中数组的创建
1、使用字面量创建
let arr = [1,2,3,4,5];
//arr [1,2,3,4,5]
2、使用构造函数创建
方式一
创建一个空数组
let arr = new Array();
//arr []
方式二
创建一个长度为5的数组,并且存放的全都是undefined
let arr = new Array(5);
//arr[0] === undefined
//true
方式三
创一个长度为3的数组,并且存放1,2,5
let arr = new Array(1,2,5);
//arr [1,2,5]
四、JavaScript中数组常见方法的简单使用
数组的简单访问和新增、简单修改、简单删除
简单访问和新增
//let arr = [1, '张三', true, {name: '李四',age: 18}, null, undefined, function test(content) {console.log('我是函数' + content);}]
//数据类型从左到右为 number string object null undefined 函数
let arr = [1, '张三', true, {
name: '李四',
age: 18
}, null, undefined, function test(content) {
console.log('我是函数' + content);
}]
//数组的访问 arr[下标] 从0开始 —— 最高序数-1
//这里使用for循环打印
for(let i = 0;i < arr.length; i++){
console.log('下标'+i, '=', arr[i])
}
//下标0 = 1
//下标1 = 张三
//下标2 = true
//下标3 = {name: '李四', age: 18}
//下标4 = null
//下标5 = undefined
//下标6 = ƒ test(content){console.log('我是函数'+content);}
//对于数组中对象的访问 这里函数的在数组中的下标位置为3
arr[3].name //'张三'
arr[3].age //16
//对于数组中函数的访问 这里函数的在数组中的下标位置为6
arr[6]('啊') //我是函数啊
//访问数组的最后一个元素
arr[arr.length - 1] // ƒ test(content){console.log('我是函数'+content);}
//在数组最后的位置添加元素
arr[arr.length] = '新增'
//使用下标访问
arr[arr.length - 1] //新增
简单修改
//let arr = [1, '张三', true, {name: '李四',age: 18}, null, undefined, function test(content) {console.log('我是函数' + content);}]
//数据类型从左到右为 number string object null undefined 函数
let arr = [1, '张三', true, {
name: '李四',
age: 18
}, null, undefined, function test(content) {
console.log('我是函数' + content);
}]
//修改简单数组
arr[0] = 2
//修改obj
arr[3].name = '王五'
//修改函数
arr[6] = function test(content){console.log('我修改喽'+','+content)}
//数组的访问 arr[下标] 从0开始 —— 最高序数-1
//这里使用for循环打印
for(let i = 0;i < arr.length; i++){
console.log('下标'+i, '=', arr[i])
}
//下标0 = 2
//下标1 = 张三
//下标2 = true
//下标3 = {name: '王五', age: 18}
//下标4 = null
//下标5 = undefined
//下标6 = ƒ test(content){console.log('我修改喽'+','+content)}
arr[6]('嘿嘿') //我修改喽,嘿嘿
简单删除
//let arr = [1, '张三', true, {name: '李四',age: 18}, null, undefined, function test(content) {console.log('我是函数' + content);}]
//数据类型从左到右为 number string object null undefined 函数
let arr = [1, '张三', true, {
name: '李四',
age: 18
}, null, undefined, function test(content) {
console.log('我是函数' + content);
}]
//删除数组中的最后一个元素
arr[arr.length--] 或者 arr.length--
//数组的访问 arr[下标] 从0开始 —— 最高序数-1
//这里使用for循环打印
for(let i = 0;i < arr.length; i++){
console.log('下标'+i, '=', arr[i]);
}
//下标0 = 1
//下标1 = 张三
//下标2 = true
//下标3 = {name: '李四', age: 18}
//下标4 = null
//下标5 = undefined
//删除数组中最后n个元素
let n = 3;
arr.length -= n;
//下标0 = 1
//下标1 = 张三
//下标2 = true
//下标3 = {name: '李四', age: 18}
数组中方法的使用
不改变原数组
String():
将数组转化为字符串
let arr = [1,'张三',true];
let str = String(arr);
console.log(str); //1,张三,true
console.log(typeof(str)); //string
join():
将数组转化为字符串,并根据自定义内容将其连接起来
let arr = [1,'张三',true];
let Arr= arr.join('-');
console.log(Arr); //1-张三-true
concat():
将多个数组合并为一个数组
let arr = [1,'张三',true];
let arr1 = [2,'李四',false];
let arr2 = [3,'王五',null]
let Arr= arr.concat(arr1,arr2);
console.log(Arr); //[1, '张三', true, 2, '李四', false, 3, '王五', null]
slice():
slice():通过索引位置获取元素,该方法不会修改原数组,只是返回一个新的子数组。
let arr = [1, '张三', true, 2, '李四', false]
let Arr = arr.slice(1,3)
console.log(Arr) //['张三', true]
console.log(arr) //[1, '张三', true, 2, '李四', false]
indexOf():
返回查询的字符串在数组中首次出现的位置
let arr = [1,'张三',true,'张三'];
arr.indexOf('张三'); //1
lastIndexOf():
返回查询的字符串在数组中最后一次出现的位置
let arr = [1,'张三',true,'张三'];
arr.lastIndexOf('张三'); //1
改变元素组
splice():
从数组中添加或删除元素,然后返回被删除的数组
let arr = [1,'张三',true,'张三'];
//从下标为0的元素开始截取一位
let Arr = arr.splice(0,1);
console.log(Arr ); //[1]
console.log(arr); //['张三', true, '张三']
//从下标为1的元素开始截取0位,并添加'李四',false
let Arr1 = arr.splice(1,0,'李四',false);
console.log(Arr1); //[]
console.log(arr); //['张三', '李四', false, true, '张三']
push():
向数组的末尾添加一个或多个元素,并返回新的长度
let arr = [1,'张三',true,'张三'];
let Arr = arr.push('我是添加元素');
console.log(Arr); //5
console.log(arr); //[1, '张三', true, '张三', '我是添加元素']
sort():
对数组元素进行排序
let arr = [1,4,7,9,4,5,6,78,99];
//正序
let Arr = arr.sort((a,b)=>(a-b));
console.log(Arr) //[1, 4, 4, 5, 6, 7, 9, 78, 99]
console.log(arr) //[1, 4, 4, 5, 6, 7, 9, 78, 99]
//倒序
let Arr1 = arr.sort((a,b)=>(b-a));
console.log(Arr1) //[99, 78, 9, 7, 6, 5, 4, 4, 1]
console.log(arr) //[99, 78, 9, 7, 6, 5, 4, 4, 1]
reverse():
对数组进行倒序
let arr = [1,'张三',true,'张三'];
arr.reverse();
console.log(arr) //['张三', true, '张三', 1]