JS中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引只能是整数。然而这些数字索引在内部被转换为字符串类型,这是因为JS对象中的属性名必须是字符串,数组在JS中只是一种特殊的对象,所以效率上不如其他语言中的数组高。
JS中的数组严格来说应该称作对象,是特殊的JavaScript对象 ,在内部被归类为数组。由于Array在JS中被当作对象,因此它有许多属性和方法可以在编程时使用。
Array .prototype.__proto__ === Object.prototype //true
一、创建数组
1、使用Array构造函数
let colors1 = new Array(); //定义空数组
let colors2 = new Array(20); // 定义长度为20的数组
2、使用数组字面量表述法
let arr = []
let arr1 = [1,2,3,4,5,6,7,8,9]
let arr2 = ["快乐","幸运","肥宅水","编程","代码","国潮"]
推荐使用[ ]操作符,和使用Array的构造函数相比,编写代码的速度更快,效率更高。
二、读写数组
1、读--使用[ ]操作符将数据赋给数组
let nums = []
nums[0] =1 //通过[]操作符赋值
for (let i = 0; i < 10; i++) {
nums[i] = i+1
}
console.log(nums); //1 2 3 4 5 6 7 8 9 10
2、写--使用 [] 操作符读取数组中的元素
let h = 0
let arr6 = new Array({ x: 1, y: 2 }, h + 5, h + 9);
console.log(arr6[0]); // Object{x:1,y:2}
console.log(arr6[1]); // 5
length属性反映的是当前数组中元素的个数,使用它,可以确保循环遍历了数组中的所有元素。
JS 中 的数组也是对象,数组的长度可以任意增长,超出其创建时指定的长度。数组元素不连续的数组我们称为稀疏数组。
let arr = [1, 2, 4, , 6]
let arr1 = new Array(5);
arr[10] = 6;
arr[100] = 56;
console.log(arr); // (101) [1, 2, 4, empty, 6, empty × 5, 6, empty × 89, 56]
console.log(arr.length); // 101
三、数组元素
1、元素的添加
(a)使用[ ]操作符;
(b)arr.push(val),在数组末尾添加元素;
(c)arr.unshift(val),在数组开头添加元素
let arr = [1, 2, 4, 6]
arr[4] = 5
console.log(arr); // (5) [1, 2, 4, 6, 5]
arr.push(7)
console.log(arr); // (6) [1, 2, 4, 6, 5, 7]
arr.unshift(0);
console.log(arr);// (7)[0, 1, 2, 4, 6, 5, 7]
2、元素的删除
(a)delete arr[ i ] 操作符
(b)arr.pop() 删除数组最后一个元素
(c)arr.shift() 删除第一个元素
let arr = [1, 2, 4, 6]
delete arr[3] // (4) [1, 2, 4, empty] empty---空
console.log(arr);
arr.pop()
console.log(arr); // (3) [1, 2, 4]
arr.shift();
console.log(arr); // (2) [2, 4]
3、遍历数组元素
let numbers = [1, 2, 3, 5, 8, 13, 21];
let sum = 0;
for (var i = 0; i < numbers.length; ++i) {
sum += numbers[i]; //通过[]操作符读取
}
console.log(sum);
四、数组复制
讲一个数组赋值给另一个数组,有两种方式,分别是浅复制和深复制。
1、浅复制
let nums = [1,2,3,4,5,6,7,8,9];
let sums = nums;
console.log(sums == nums) //true
console.log(sums[0]); // 1
这种行为被称为浅复制,新数组依然指向原来的数组。
2、深复制
let nums = [1,2,3,4,5,6,7,8,9];
let samenums = [];
let length = nums.length; //数组长度
for (let i = 0; i < length; i++) {
samenums[i] = nums[i]
}
console.log(samenums == nums) //false
console.log(samenums[0]); // 1