Javascript 我是否访问多维数组上的未定义?未捕获类型错误:无法读取属性'-1';未定义的
多维数组的访问如何在未定义的值上工作 我的第三条线怎么了Javascript 我是否访问多维数组上的未定义?未捕获类型错误:无法读取属性'-1';未定义的,javascript,Javascript,多维数组的访问如何在未定义的值上工作 我的第三条线怎么了 var board = [ [0, 0, 0], [0, 1, 1] ]; console.log(board[0][0]); // 0 console.log(board[0][-1]); // undefined, What's going on here and why? console.log(board[-
var board = [
[0, 0, 0],
[0, 1, 1]
];
console.log(board[0][0]); // 0
console.log(board[0][-1]); // undefined, What's going on here and why?
console.log(board[-1][1]); // uncaught typerror: cannot read property -1 of undefined - Why is this error thrown?
javascript中没有“真正的”多维数组。您所拥有的只是一个数组数组
访问内部属性(您的第二个示例)的不存在属性会产生未定义的
访问外部属性的不存在属性(您的第三个示例)也会产生
未定义的
,但您希望始终得到一个内部数组,您可以在该数组上访问属性0
,当属性未定义时会引发异常
除此之外,永远不要访问数组的负整数属性,如果可能,也不要访问超出数组长度的索引。javascript中没有“真实”多维数组。您所拥有的只是一个数组数组
访问内部属性(您的第二个示例)的不存在属性会产生未定义的
访问外部属性的不存在属性(您的第三个示例)也会产生未定义的
,但您希望始终得到一个内部数组,您可以在该数组上访问属性0
,当属性未定义时会引发异常
除此之外,永远不要访问数组的负整数属性,如果可能,也不要访问超出数组长度的索引。在第二行:
board[0]->[0,0,0]
因此,通过执行board[0][1]
,您是在说,“给我[0,0,0]
的元素-1”,这是未定义的
在你的第三行:
board[-1]->未定义
因此,通过执行board[-1][1]
,您的意思是,“给我未定义的元素1
”,因为未定义的东西没有属性,这会抛出一个错误。在您的第二行:
board[0]->[0,0,0]
因此,通过执行board[0][1]
,您是在说,“给我[0,0,0]
的元素-1”,这是未定义的
在你的第三行:
board[-1]->未定义
因此,通过执行board[-1][1]
,您的意思是,“给我未定义的元素1”,因为未定义的东西没有属性,这会抛出一个错误。因此,如果我检查一个board的每个值,并且我需要检查以查看相邻元素(左上、右上等)是否处于绑定状态,对此我可以使用什么策略?您所说的“访问属性0”是什么意思?测试索引号本身是否在绑定中,而不是属性是否存在。例如,x>=0&&x=0&&yarr[0]
是一个名为0
-类似于obj[“value”]
。数组与JavaScript中的对象在这方面没有什么不同。因此,基本上在我的第三行中,我试图获取这个值-未定义的[“someProperty”]?因此,如果我检查一块板上的每个值,我需要检查邻居(左上、右上等)是否处于绑定状态,对此我可以使用什么策略?您所说的“访问属性0”是什么意思?测试索引号本身是否在绑定中,而不是属性是否存在。例如,x>=0&&x=0&&yarr[0]
是一个名为0
-类似于obj[“value”]
。数组与JavaScript中的对象在这方面没有什么不同。因此,基本上在我的第三行中,我试图得到这个值-未定义的[“someProperty”]?值得思考的是:您还可以表示如下多维数组<代码>变量板={};电路板[[0,0]]=0;董事会[[0,1]]=1
这导致板
为{'0,0':0,'0,1':1}
@timothyshiels:不,最好不要(出于各种原因)。别把新手和这混淆了@Bergi我只在少量的浏览器代码中使用了JS。如果你可以在评论(或指向链接)中简明扼要地说出来,那么它不好的原因是什么?我从来没有真正使用过它——只是当场想到了。@TimothyShields:没有链接,但是:板
不是数组(较慢),它没有维度,当访问板[[0,1]]
时,你会隐式地将[0,1]
字符串化为“0,1”
,这相当令人困惑,并可能导致错误的信念。当然,我不否认在某些情况下,这样的结构可能没有用处,但必须经过仔细考虑。@Bergi好的,谢谢,尽管我知道所有这些。:)对于稀疏向量或矩阵之类的东西,这可能是有意义的,但对于密集多维数组,这似乎并不好<代码>变量板={};电路板[[0,0]]=0;董事会[[0,1]]=1
这导致板
为{'0,0':0,'0,1':1}
@timothyshiels:不,最好不要(出于各种原因)。别把新手和这混淆了@Bergi我只在少量的浏览器代码中使用了JS。如果你可以在评论(或指向链接)中简明扼要地说出来,那么它不好的原因是什么?我从来没有真正使用过它——只是当场想到了。@TimothyShields:没有链接,但是:板
不是数组(较慢),它没有维度,当访问板[[0,1]]
时,你会隐式地将[0,1]
字符串化为“0,1”
,这相当令人困惑,并可能导致错误的信念。当然,我不否认在某些情况下,这样的结构可能没有用处,但必须经过仔细考虑。@Bergi好的,谢谢,尽管我知道所有这些。:)对于稀疏向量或矩阵之类的东西,这可能是有意义的,但对于密集的多维数组,这似乎并不好。