1

这个问题的答案似乎很明显,但我一直在寻求改进我的语义,所以请耐心等待。

我有一个包含 X,Y 坐标的单个项目的数组结构

var example = new Array();
example.push({x:0,y:0});

在我的代码中,我有一个设置的间隔来更新我的画布并检查某些条件。包括一个类似的

if(example[0].x == other.x && example[0].y == other.y)
{
//do something
}

问题是数组是非常动态的,当代码第一次执行时,示例数组是空的。因此,Chrome 会抛出“无法获取属性 x”的错误。为了关闭控制台,我在数组 {x:"~", y:"~"} 中添加了一个虚拟项目,但这看起来真的很不直观。我是否实现了不受欢迎的数据结构?处理不存在的对象的 if 语句的简单方法是什么?

4

3 回答 3

4

你为什么不检查数组是否有元素?

if (example.length && ...)

或者第一个元素是否为真:

if (example[0] && ...)
于 2012-11-26T05:45:02.410 回答
2
if (0 in example
    && example[0].x == other.x && example[0].y == other.y) {
  // do something
}

(这适用于任意索引,而不仅仅是0; 如果您只想检查数组是否为非空,example.length如 melpomene 所示是好的。)

于 2012-11-26T05:45:13.640 回答
1

您应该能够检查第一级元素(即“示例”) - 当您尝试访问为 null 或未定义的元素的属性时,JavaScript 通常会抛出这样的错误。就像其他一些人已经表明的那样:

if(example[0] && example[0].x === other.x)

关键是尽管 JavaScript 会让您拥有 example[0] 并根据需要返回,但是一旦您尝试访问该属性,您就不走运了:

var example = [];
//undefined
example
//[]
example[0]
//undefined <--- this is a falsy value, will evaluate false in a check
example[0].x
//TypeError: Cannot read property 'x' of undefined
于 2012-11-26T05:49:40.453 回答