要意识到的是,javascript 中没有多维数组。使数组元素包含一个数组并使用它很容易,但是您所做的所有引用都必须使用该考虑因素。
所以,你可以做
arr = []; // or more appropriately {}, but I'll get to that soon
arr['house'] = [];
arr['house']['rooms'] = 2;
但是做
arr['house']['rooms'] = 2;
应该给你一个错误,除非你已经定义了arr
and arr['house']
。
如果您已定义arr
但未定义arr['house']
,则引用它是有效的语法arr['house']
- 但返回值将(适当地)为undefined
.
这就是你在看的地方arr['plane']['room']
。 arr
已定义,所以没关系,但arr['plane']
返回未定义,并且引用undefined.['room']
会引发错误。
如果您想避免错误并拥有多个参考级别,则必须确保除最低级别之外的所有级别都存在。
你被困住了if (arr && arr['plane'] && arr['plane']['room'])
。
或者可能if (arr && arr['plane'] && room in arr['plane']
会更准确,具体取决于您的需要。第一个将检查是否arr['plane']['room']
具有真值,而第二个将检查是否arr['plane']['room']
存在(并且可能具有假值)。
数组与对象
数组和对象非常相似,都可以用[]
符号来访问,所以它有点令人困惑,但从技术上讲,你正在使用数组的对象方面来做你正在做的事情。请记住,所有数组(以及除基元之外的所有内容 - 数字、字符串和布尔值)都是对象,因此数组可以做对象可以做的所有事情,甚至更多。但数组只适用于数字索引,即 arr[1][2]。当您使用字符串引用数组时,您正在尝试访问与该字符串匹配的基础对象的成员。
但在这种情况下,这并不重要。没有多维数组或对象。
[]
对象符号只是一种使用变量检查对象成员的方法。arr['plane']['rooms'] 实际上等价于arr.plane.rooms
. 但也许该arr.plane.room
符号将有助于更清楚地说明您必须首先检查arr.plane
(and arr
) 的原因。