如果语句为不存在的对象抛出错误

时间:2012-11-26 05:42:08

标签: javascript object if-statement

这个问题的答案似乎很明显,但我总是希望改善我的语义,所以请耐心等待。

我有一个包含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语句的简单方法是什么?不存在?

3 个答案:

答案 0 :(得分:4)

为什么不检查数组是否包含元素?

if (example.length && ...)

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

if (example[0] && ...)

答案 1 :(得分:2)

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

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

答案 2 :(得分: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