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

标签 java javascript arrays

我只是在玩 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 个元素是 null0超过 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/

相关文章:

c - 如何将值作为动态数组从 vb 传递到 c

java - Grails 未拾取已编译的 java .class 文件

java - 如何通过gradle运行多个Java类?

java - 对 Javascript 对象文字进行排序

java - Java 中最快的字符到字符串转换

javascript - 如何将动态范围变量添加到angularjs中的for循环?

javascript - 如何将输入数据显示到 iframe 而不是新窗口中?

php - 我们如何根据 Java 脚本的 If-else 条件调用 Php 函数?

java - 从具有可变长度/字段的数组中获取 ID 到类?

python - 如何在 numpy 数组中使用多个过滤器?