我只是在玩 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
。
这是一个可以观察到这一点的 fiddle :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 中看到这种奇怪的行为,而在其他语言中却没有?
最佳答案
Why is this strange behavior in JavaScript?
因为数组只是对象。如果您访问一个不存在的属性,您将返回 undefined
。您只是没有在索引 3
处分配元素,所以什么都没有。
通过分配更高的索引来自动增长数组不会改变这种行为。它会影响 .length
属性,是的,但中间索引将保持不存在。这被称为 sparse array .
Why is this strange behaviour in Java / C / C++?
因为数组是分配的内存块,当分配一个大小为 4 的数组时,它的所有元素都从该内存位置获取它们的值。为了避免不确定的值,在某些语言/情况下,字段会默认初始化,通常使用 0
。
关于java - JavaScript与Java中数组中未初始化的项目有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038939/