我正在读一本关于Javascript的书并看到了这一行;
JavaScript不支持真正的多维数组,但您可以 用数组数组近似它们。
有什么区别?
答案 0 :(得分:17)
真正的多维数组必须使用多个索引编制索引。可以使用单个索引索引数组数组,该索引将返回另一个数组。真正的多维数组连续存储其所有数据。数组数组存储其周围任意散布的所有组成数组。由于真实数组的缓存效应,这可以提高迭代性能。
答案 1 :(得分:3)
(一种视觉解释,补充了answer的优秀@recursive)
在某些语言(C#)中,两者都有。不同之处在于此类阵列的“形状”。
int[3, 4] // true two-dimensional array
// it will "look" like this, rectangular shape
[[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]]
但是当你定义一个数组数组时,它很容易(特别是在javascript中)看起来像这样。它被称为jagged array。
[[0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0]]
答案 2 :(得分:2)
JavaScript中没有任何内容......
var arr = new Array[5][3]; /* Some weird JS/C-like thing for demonstration */
......强制执行长度。像矩阵一样。
但是,您可以构建一个Array
,其成员都是Array
个固定长度。如果其中一个子Array
具有不同的长度,那么它将是锯齿状的 Array
。
答案 3 :(得分:2)
作者似乎假设“真正的”多维数组是所有元素的数组:
是数组;
按值存储,而不是按引用存储;以及
长度相同。
JavaScript数组可能包含其他数组,但不包含值,仅通过引用。也就是说,每行的元素在存储器中可以是连续的,但行本身可以不是。此外,没有办法静态地指示所有内部数组必须具有相同的长度,因为JavaScript是动态类型的。
但是数组数组正是你应该用来表示JavaScript中的多维数组的,当你刚学习语言时,内部表示的细节可能与你无关。
答案 4 :(得分:1)
虽然JavaScript规范(3.0)没有提到多维数组,但它们实际上是可行的。多维数组可以由数组数组表示。 See
例如。
var items = [[1,2],[3,4],[5,6]];
alert(items[0][0]); // Would alert 1
Javascript中的一维数组。
var a = [0, 1, 2, 3];
a[[2]] === a[2]; // this is true
2 == [2] //true
// Even complex
2 == [[[2]]] //true
// And even more
var a = { "xyz" : 1 };
a[[[["xyz"]]]] === a["xyz"]; //true