JS:数组越界

JavaScript031

JS:数组越界,第1张

原文: https://www.cnblogs.com/ziyunfei/archive/2012/11/28/2793435.html

JavaScript中的数组就是一个稍微有点特殊的普通对象.在Array.prototype.push方法执行时,会先把每个要push的元素push进去,也就是定义多个自身属性(ES5 15.4.4.7.5).

然后才设置数组的length属性为最大的索引值+1(ES5 15.4.4.7.5),这个例子中就是Math.pow(2, 32) + 1,这时才会报错(ES5 15.4.5.1.3.d),但上面的元素已经push进去了.

如果再次push的话,还会从当前的length属性-1的那个索引处开始push,也就出现了覆盖而不是继续追加的情况.

没有 js的数组是hash表,如果找不到会返回undefined

由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。

举例:

#include<stdio.h>

void PutArray(int *p, int length)

{

// 在此判断入口参数p和length的有效性

……

for(int

i=0i<lengthi++)

printf("%d\t",p[i])

}

void main()

{

int a[3]={2,4,6}

printf("数组a[3]调用函数PutArray的结果为:\n")

PutArray(a,

sizeof(a)/sizeof(a[0]))

}