数组
- 变量:存储数据的,只能存储一个值
- 对象:本质特征喝行为的事物,能储存一条数据
- 数组:可以存储一组(多条数据)或者一系列相关数据的容器
- 数组元素:存储在数组中,并赋予索引号(下标)的数据段
-
- 数据元素的类型可以不相同
-
- 数据下标:标识数组元素的唯一索引号,最小下标为0,最大下标为length-1
好处
可以集中管理,提高性能
声明数组
1.字面量方式var 数组名=[] 2.构造函数的方式 var数组名= new Array()
//1.字面量方式 var 数组名=[]
var arr = [1, 2, true, "zhangsan", null];
//数组的长度
console.log(arr.length); //5
//向数据中添加数据
arr[5] = false; //没数据的话就是添加
console.log(arr.length); //6
arr[2] = 123; //有数据的话,就是修改
console.log(arr);
//创建数组
var arr2 = new Array();
console.log(arr2);
var arr1 = new Array(2, 3, 88);
console.log(arr1);
//创建数组,有且仅有一个整数作为参数,表示数组的长度
//其他情况表示数组中的元素
var arr3 = new Array(6);
console.log(arr3);
//通过循环向数组中添加元素
var arr4 = new Array(6);
for (i = 0; i < arr4.length; i++) {
arr4[i] = parseInt(prompt("请输入第" + (i + 1) + "个的数值"));
}
console.log(arr4);
数组的属性
数组名.length 返回数组的长度 数组的数据类型,object 遍历数组(循环数组)
// unshift:在数组前面增加新元素,原数组改变
var arr = [2, 3, 47, 5, 6, 7, 8];
var res = arr.unshift(99, [15, 87], 888)
console.log(res); //返回的是数组的长度
console.log(arr);
//push,后增,在数组后面增加新元素,原数组改变
var arr1 = [2, 3, 47, 5, 6, 7, 8];
var res1 = arr1.push(999);
console.log(res1);
console.log(arr1);
//shift:删除数组首部的元素,一次只能删除一个。返回值是被删除的元素,影响原数组
var arr2 = [2, 3, 47, 5, 6, 7, 8];
var res2 = arr2.shift();
console.log(res2); //2
console.log(arr2);
//pop:删除数组尾部的元素,一次只能删除一个。返回值是被删除的元素,影响原数组
var arr3 = [2, 3, 47, 5, 6, 7, 8];
var res3 = arr3.pop();
console.log(arr3);
console.log(res3);
//splice:(从哪个下标开始,删除的长度,新增的元素)。返回值是被删除的元素数组,会影响原数组
var arr4 = [5, 6, 7, 8, 9];
var res4 = arr4.splice(2);
console.log(arr4); // 5,6
console.log(res4); // 7,8,9
var arr5 = [7, 8, 9, 10, 11];
var res5 = arr5.splice(2, 2);
console.log(arr5); //7,8,11
console.log(res5); //9,10
var arr6 = [11, 22, 33, 44, 55, 66, 77];
var res6 = arr6.splice(2, 0, [1, 2, 3], true);
console.log(arr6); //[11, 22, [1, 2, 3], true, 33, 44, 55, 66, 77]
console.log(res6); //[]
//concat拼接后新数组,不影响原数组(新数组中有数组,则将最外层数组拆开进行拼接)
var arr7 = [5, 6, 7, 8, 9];
var res7 = arr7.concat(-4, -2, [2, 3, [4, 6]], 10)
// [5, 6, 7, 8, 9, -4, -2, 2, 3, Array(2), 10]
console.log(res7);
console.log(arr7);
// [5, 6, 7, 8, 9]
//slice(start,end).被截取的新数组,不影响原数组
var arr8 = [2, 3, 4, 5, 6, 7];
var res8 = arr8.slice(2);
console.log(res8); //[4, 5, 6, 7]
console.log(arr8); //[2, 3, 4, 5, 6, 7]
var res9 = arr8.slice(2, 4);
console.log(res9); //[4, 5]
建立新的空数组,内存空间指向不一样,就不会改一处而全都改变。
//复制
var arr10 = [5, 6, 7, 8, 9];
var list = [];
function fnCopyArr(arr10) {
return arr10.slice(0)
}
list = fnCopyArr(arr10);
arr10[0] = 4
console.log(arr10, list) //[4, 6, 7, 8, 9] & [5, 6, 7, 8, 9]
var arr11 = [5, 6, 7, 8, 9];
var list1 = [];
function fnCopyArr1(arr11) {
return arr11.concat()
}
list1 = fnCopyArr1(arr11);
arr11[0] = 1
console.log(arr11, list1)
//[1, 6, 7, 8, 9] & [5, 6, 7, 8, 9]