javascript - 如何查找数组的值是否未定义?

标签 javascript arrays

如果我们有一个不存在的数组,并且我们检查该数组的值,则会出现错误。 “变量未定义”

例如我有:

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;

除非您已经定义了 arrarr['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/

相关文章:

javascript - 如何使用 html5 canvas 在杯子上叠加图像

arrays - 有没有办法在 Swift 中打破数组的 reduce 函数?

c - C 数组中的垃圾值

javascript - 从 2 个数组中的 1 个构建的 React .map

ruby - 在 Ruby 多维数组中查找和替换

javascript - 字体大小的 jQuery 缩放效果

javascript - 将一个元素的颜色值链接到另一个元素

javascript - 使用 JS 在 HTML 中操作 SVG

javascript - 如何使用自定义消息参数发送 Facebook apprequests/通知?

arrays - 如何改变数组中的变量?