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]))
}