理解javascript中多维数组的语法

理解javascript中多维数组的语法,javascript,Javascript,这将返回3,但我无法理解这实际上意味着什么。为什么会出现这种结果?数组测试[0]包含三项: [1,2] [2,3] [3,4] 因此,长度的结果是3 数组test的长度只有一个,因为test只包含一个数组: [1,2],[2,3],[3,4] 事实上,这不是一个多维数组,它只是一个包含数组的数组(称为锯齿数组或嵌套数组)。JavaScript中没有多维数组。只有嵌套数组 var test = [[ [1,2],[2,3],[3,4] ]]; alert(test[[0]].lengt

这将返回3,但我无法理解这实际上意味着什么。为什么会出现这种结果?

数组
测试[0]
包含三项:

  • [1,2]
  • [2,3]
  • [3,4]
因此,
长度的结果是3

数组
test
的长度只有一个,因为
test
只包含一个数组:

  • [1,2],[2,3],[3,4]

事实上,这不是一个多维数组,它只是一个包含数组的数组(称为锯齿数组或嵌套数组)。

JavaScript中没有多维数组。只有嵌套数组

var test = [[
  [1,2],[2,3],[3,4]
]];
alert(test[[0]].length);
如您所见,
test[0]
的长度为三

test[[0]]
在语义上不正确(*),并折叠为
test[0]


(*)索引运算符(
[]
)需要一个数字,如
测试[0]
中所示。如果您没有向它传递一个数字(如在
测试[[0]]
中,您传递了数组
[0]
),则首先会发生到字符串的转换。(这是因为下面的第一个注释。)

数组通过用逗号连接其成员而转换为字符串<代码>[0]。toString()
“0”
,因此
测试[[0]]
相当于
测试[“0”]
,这相当于
测试[0]

注:

  • 方括号也用于属性访问,因此
    test[“length”]
    test.length
    相同
  • 因此,像
    test[[0]][[“length”]]]
    这样可怕的东西相当于
    test[0].length
    ,并将为您提供
    3
  • 类似于
    test[[0,0]]
    的内容将是
    test[“0,0”]
    ——由于该数组上没有名为
    “0,0”
    的属性,因此将得到
    未定义的

测试[[0]]与测试[0]相同,测试[0]是一个数组

[            //  test
  [          //    test[0]
    [1,2],   //      test[0][0]
    [2,3],   //      test[0][1]
    [3,4]    //      test[0][2]
  ]          //
]            //
由这些元素组成

例如,如果要访问,
[2,3]
,则需要使用以下语法:

[1,2],[2,3],[3,4]

测试[0][1]。length
将为您提供2。

如果您想获得第一个数组的长度,请写入

test[0][1]

这是一个嵌套数组。数组的数组

如果您扩展您的示例,就会更加清楚:

alert(test[0][0].length);
现在,您的测试是一个由两个数组组成的数组。第一个是由3个数组组成的数组。第二个是由4个数组组成的数组

现在,
test.length
是2<代码>测试[0]。长度为3<代码>测试[1]。长度为4<代码>[[n]]
只会崩溃


演示:

如果这些语法相同,即test[[0]]和test[0],那么为什么支持这种语法?@patrickhoffman否,它将
[0]
转换为字符串,这就是
test[[0]]
工作而
test[[0,0]
不工作的原因。
var test = [
    [
        [1,2],[2,3],[3,4]
    ], 
    [
        [5,6],[7,8],[9,9],[6,7]
    ], 
];
alert(test[[1]].length);