js基础-4
数组
概念
- 数组是有序的列表,存储若干个无序的元素,一般存储相同类型的元素
- 将元素放在列表的第几位,从0开始计算,这个位值就是下标,又称索引值
- 元素被存储在列表中,这个数据就是元素,简称元
- 从列表中获取这个元素的方法,使用 数组名[下标] 就可以得到这个元素,这种方式就是下标变量
数组的创建
- 字面量创建 : var arr=[1,2,5,6]
- 构造函数创建 : var arr = new Array(2,5,7,1);
- 如果构造函数创建数组时,仅有一个参数且这个参数是一个大于等于0的正整数,那么这个数就是这个新数组的长度,并且没有元素;如果是负值或者小数,就会报错;如果是非数值类型,那么就会把这个元素放在数组的第0位
- 对象创建法(一般不用):var arr = new Object(1,2,35,6)
- 通过arr.constructor === Array 判断是否为数组
- 也可以通过Array.isArray(arr)判断,仅限ES6以后版本可使用
- String(arr)!=="[object Object]"是否为true 是就是数组,不是就是对象
数组的长度
- arr.length 就是数组中元素的个数
- 数组的长度是一个可读可写的属性
- 如果数组的长度修改的比原来的长度小,就会把对应多出来的元素删除
- arr.length = 0;可以将数组清空
- 如果数组的长度修改的比原来的长度大,就会在数组的尾部添加多出来数量的空元素
- 如果数组下表大于数组的长度时,就会在对应的下标位增加元素,中间增加空元素
- 数组的长度比数组的最大下标值大1
- arr[arr.length]=5,表示在数组的尾部添加一个元素5
数组的遍历
- 数组使用for循环遍历,会将所有下标遍历,不遍历数组的对象属性,但是会遍历到空元素,遍历时下标都是数值
- 数组使用for in循环遍历,会将所有的可枚举属性遍历,如果该属性没有值就不遍历,但是数组的对象属性会被遍历,遍历时都是讲下标转换为字符串
数组与对象的区别
- 对象是一种松散型结构,对象是键值对存储,当删除一个元素时对象的其他值不会发生变化,对象没有元素个数,也就是对象长度,对象中不知道存储了多少个元素,插入和删除不会影响其他数据,因为通过key去一一对应存储一个值,索引获取时,只需要根据key去取值就可以了,所以时间复杂度极低。对于对象来说,因为每个数据都是独立存在的,不存在关联关系,更不能排序,所以不找因关联关系找到对应的值
- 数组是紧密型结构,只用下标存储对应的值,当删除一个元素时,因为紧密结构的关系,就会将后面的元素向前递进,数组是有长度的,数组中可以知道存储了多少元素,因为插入和删除都会影响数组的元素的位置和结构,因此插入和删除都会影响数组的运行效率,时间复杂度较高。
- 数组的存储是依靠下标,所以如果需要查找一个值,就需要遍历数组的每个元素,已达到找到目标元素,因此事件复杂度也是极高的。数组在使用时,因为是紧密型结构,我们根据上一个内容找到与其相关联的其他元素。例如我们可以利用数组排序,找一个最小值,还可以迅速找第二位最小值