如果我们有一个不存在的数组,并且我们检查该数组的值,则会出现错误。 “变量未定义”
例如我有:
var arr = new Array();
arr['house']['rooms'] = 2;
我使用
if ( typeof arr['plane']['room'] != 'undefined' ) )
它说 arr['plane'] 未定义...
我不想使用这个:
if ( typeof arr['plane'] != 'undefined' ) ) {
if ( typeof arr['plane']['room'] != 'undefined' ) {
}
}
在 php 中,我使用 isset,它对我来说很有效,我在 google 上搜索了很多以找到答案,但我不能......
最佳答案
要认识到的是,JavaScript 中不存在多维数组。让数组元素包含一个数组并使用它很容易,但是您所做的所有引用都必须考虑到这一点。
所以,你可以这样做
arr = []; // or more appropriately {}, but I'll get to that soon
arr['house'] = [];
arr['house']['rooms'] = 2;
但是在做
arr['house']['rooms'] = 2;
除非您已经定义了 arr
和 arr['house']
,否则应该会给您一个错误。
如果您定义了 arr
但未定义 arr['house']
,则引用 arr['house']
的语法有效- 但返回值将(适本地)未定义
。
这就是当您查看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']
是否存在(并且可能有错误值)。
数组与对象
数组和对象非常相似,都可以使用 []
表示法进行访问,因此有点令人困惑,但从技术上讲,您正在使用数组的对象方面来完成您正在做的事情。请记住,所有数组(以及除基元之外的所有内容 - 数字、字符串和 bool 值)都是对象,因此数组可以执行对象可以执行的所有操作,甚至更多。但数组仅适用于数字索引,即 arr[1][2]。当您使用字符串引用数组时,您正在尝试访问与该字符串匹配的基础对象的成员。
但在这种情况下,这并不重要。不存在多维数组或对象。
对象的[]
表示法只是一种使用变量检查对象成员的方法。 arr['plane']['rooms'] 实际上相当于 arr.plane.rooms
。但也许 arr.plane.room
符号将有助于更清楚地说明为什么您必须首先检查 arr.plane
(和 arr
)。
关于javascript - 如何查找数组的值是否未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19661813/