数组

146 阅读4分钟

1、数组的与对象的区别

数组:

有序列表存储着若干个无序的元素,它是紧密型结构。

将元素放在列表中的第几位从0开始计算,这个位置又被称为下标或者叫索引值。

元素被存储在列表中,这个数据就是元素,简称元。

从列表中获取这个元素的方法,使用 数组名[下标] 就可以得到这个元素,我们把这种方式叫做下标变量。

数组是紧密型结构,它一般用下标存储所对应的值,当删除一个元素时因为紧密型结构的关系,它会将后面的值向前递进,且它是有长度的,它可以知道自身存储了多少个元素,插入和删除都会影响数组的其他元素的位置和结构,因此插入和删除都会影响数组的运行效率,所以它的时间复杂度较高。

数组的存储都是依靠下标的,所以如果需要查找一个值,就需要变量数组的每个元素达到寻找目标元素的目的,因此它的时间复杂度也是较高的。数组在使用时,因为是紧密型结构,我们就可以根据上一个内容找到与其相关联的其他元素,例如我们可以用数组进行排序,找到最大或最小值。

对象:

对象时一种松散型结构,它是按键值对存储的,当删除一个元素时,对象的其他值不会发生变化,它是没有元素个数和长度的。

对象中它不知道他自己存了多少元素,插入和删除也不会影响其他的数据,所以时间复杂度极低。对于对象来说,因为每个数据都是独立存在的,不存在关联关系,更不能进行排序,所以不会因关联关系找到对应的值。

2、数组的创建。

1、字面量创建数组

var arr = [1,2,3,4,5,6];
var arr = [] //创建空数组

因为js是弱类型语言,所以创建数组时比较随意,可以任意扩张,并不需要限定它的长度,也无法限定长度。

2、构造函数创建法

var arr = new Array(1,2,3,4,5,6);
var arr = new Array(0);
var arr = Array(1,2,3,4,5,6);
var arr = new Array('a')

在构造函数创建数组时,如果仅有一个参数且这个参数是一个大于等于0的正整数时,那么这个数就是这个数组的长度,并没有元素。如果是负数或者小数就会报错。如果是非数值类型,那么会将这个元素放在数组的第0位。一般情况下最好使用 new Array ,这样会更规范我们的代码。

3、对象创建法

var arr = new Object([1,2,3,4]);

3、数组的长度以及注意点

var arr = [1,2,3,4,5,6];
console.log(arr.length)

在上述代码中,arr.length就是数组的长度,它所表示的是数组中的元素的个数,数组的长度是一个可读可写的属性,如果数组的长度修改的比原来小,就会把对应多出来的元素删除。如果数组的长度修改比原来的大,它就会加入几个空值(empty)。

arr.length--//删除最尾部的一个元素
arr.length = 0;//清空数组中所有元素
arr.length++ //在数组尾部添加一个元素
arr.[arr.length] = 1 //在数组尾部增加一个元素1
arr[10]=1;//在一个数组的第十一项加入元素1

需要知道的是数组的长度比数组的最大下标值大1;

如果出现arr[10]=1这种数组下标大于数组的长度时,就会在对于的下标位置增加元素,中间增加空元素。

使用for循环遍历数组时,它只会遍历数组的下标,不遍历数组的对象属性,但是会遍历到空元素,遍历时下标都是数值。

使用for in循环遍历数组时,会将所有的可枚举属性遍历,如果这个属性没有值就不遍历。如数组中下标为空元素的,就不会被遍历,但是数组的对象属性会被遍历,遍历时都是将下标转化为字符串。

i in arr可以判断对象中的这个key值是否存在,在数组中下标就相当于对象中的key值,可以判断它的对应值是否存在。