这个问题的答案似乎很明显,但我总是希望改善我的语义,所以请耐心等待。
我有一个包含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语句的简单方法是什么?不存在?
答案 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