小编典典

JavaScript与Java中数组中未初始化的项目之间有什么区别?

java

我只是在玩JavaScript而被一个简单的程序所困扰。

我在JavaScript中声明了一个数组

var a = [0, 1, 2];

然后,由于JavaScript中没有固定的数组大小,我们可以向数组中添加更多的大小,因此我向数组中添加了另一个整数。

a[3] = 3;

和预期的一样,如果我尝试访问,a[4]我肯定会获得undefined

现在,如果我取一个数组

var a = [0,1,2];

并添加另一个元素

a[4] = 4;

我故意没有定义a[3],而这也给了我a[3]作为undefined

这是一个可以观察到的小提琴:http :
//jsfiddle.net/ZUrvM/

现在,如果我在Java中尝试相同的操作,

int[] a = new int[4];
a[0] = 0;
a[1] = 1;

a[3] = 3;

然后我最终

a[2] = 0;

您可以在ideone上看到它:https
://ideone.com/WKn6Rf

我在Java中发现此问题的原因是,在声明数组时定义了四个变量,我们只能将值分配给声明的数组大小。但是在JavaScript中,当我声明一个大小为3的数组,然后添加第5个元素时,为什么不将第4个元素视为是,null或者0如果我们将数组大小增加到4以上呢?

为什么在JavaScript中会看到这种奇怪的行为,而在其他语言中却看不到?


阅读 213

收藏
2020-11-19

共1个答案

小编典典

为什么在JavaScript中这种奇怪的行为?

因为数组只是对象。如果您访问不存在的属性,则会返回undefined。您只是没有在index处分配元素3,所以什么也没有。

通过分配更高的索引来自动增长数组不会更改此行为。会影响.length属性,是的,但是中间索引将不存在。这称为稀疏数组

为什么在Java / C / C ++中这种奇怪的行为?

因为数组是分配的内存的大块,所以当分配大小为4的数组时,其所有元素均从该内存位置获取其值。为了避免不确定的值,在某些语言/场合中,字段通常使用进行默认初始化0

2020-11-19