数组
数组是一段线性分配的内存,主要通过整数计算偏移并访问其中元素。在其他开发语言中,数组是一个性能比较出色的数据结构。但是,在JavaScript中没有类似数据结构。
JavaScript中提供一种类似数组、具有数组特性的对象来完成其他语言中数组的功能。JavaScript中数组将下标转为字符串,作为对象的属性。这就导致JavaScript中数组比其他语言的数数据结构要慢。当然,这样的结构使用起来也比较方便,其获取与更新都与对象类似。
var narray = [0,1,2,3,4,5]
console.log(narray[3])//3
console.log(narray['3'])//3
Javacript数组长度
在JavaScript中,每个数组对象都有length属性。但是JavaScript中,数组并不是固定大小的,当读取、设置大于length原始时,不会有数组越界等异常。
var narray = [0,1,2,3,4,5];
console.log(narray[6]);//undefined
console.log(narray.length);//6
narray[6]=6
console.log(narray[6]);//6
console.log(narray.length);//7
如上代码,如果获取数组中大于length的元素,会返回undefined。但是如果设置大于length的元素,数组的length属性将自动扩展到相应长度。基于这个特性,可以很简单的实现队列入队功能。
var narray = [0,1,2,3,4,5];
console.log(narray.length);//6
narray[narray.length]=6//与narray.push类似
console.log(narray.length);//7
在JavaScript的数组中,length是可以改变的,设置更大的length不会给数组分配更多的空间,但是如果将length设置较小,则大于等于length的下标元素都将被删除。
数组删除元素
Javascript数组本质上是一个对象,可以通过delete删除其中一个属性,如:
var narray = [0,1,2,3,4,5,6,7];
delete narray[2]//[0, 1, empty, 3, 4, 5, 6, 7]
console.log(narray[2])//undefined
使用delete可以删除属性,但是会在数组中留下一个空洞,且长度未发生变化。
JavaScript提供了splice进行数组元素删除(替换)
var narray = [0,1,2,3,4,5,6,7];
narray.splice(2,1)//[2]
narray.splice(1,1,1,2)//删除第二个元素,并从第二个元素开始插入1,2两个元素