Javascript If语句为不存在的对象引发错误

Javascript If语句为不存在的对象引发错误,javascript,object,if-statement,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 } 问题是数组是非常动态的,当第一次执行代码时,

这个问题的答案似乎是显而易见的,但我一直在寻求改进我的语义,所以请容忍我

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

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

if (example.length && ...)
或者第一个元素是否为真:

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

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

if (example.length && ...)
或者第一个元素是否为真:

if (example[0] && ...)
(这适用于任意索引,而不仅仅是
0
;如果您只想检查数组是否为非空,
示例。如melpomene所示,长度
很好。)


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

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

if(example[0] && example[0].x === other.x)
关键是JavaScript会让您拥有示例[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
var示例=[];
//未定义
例子
//[]
示例[0]

//undefined您应该能够检查第一级元素(即“example”)-当您试图访问null或未定义元素的属性时,JavaScript通常会抛出类似这样的错误。正如其他一些人已经表明的那样:

if(example[0] && example[0].x === other.x)
关键是JavaScript会让您拥有示例[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
var示例=[];
//未定义
例子
//[]
示例[0]

//未定义的
示例[0]
将因
[undefined]
[null]
[0]
[false]
而失败。。。只有当您毫无疑问地知道虚假值不存在时才使用。对于
[未定义]
[空]
,它应该失败
undefined.x
null.x
也会抛出异常(和
0.x
/
false.x
都是不明智的做法);我没有投反对票或其他任何东西,只是说它在这种情况下有效,但在另一种情况下推广和应用相同的策略是不明智的。(我知道至少有一次当我认为我不应该做的事情时,它咬了我的懒屁股。)@amadan在这种情况下没关系,因为成员应该是对象。但是很好地指出了这些限制。
示例[0]
将失败于
[undefined]
[null]
[0]
[false]
。。。只有当您毫无疑问地知道虚假值不存在时才使用。对于
[未定义]
[空]
,它应该失败
undefined.x
null.x
也会抛出异常(和
0.x
/
false.x
都是不明智的做法);我没有投反对票或其他任何东西,只是说它在这种情况下有效,但在另一种情况下推广和应用相同的策略是不明智的。(我知道至少有一次当我认为我不应该做的事情时,它咬了我的懒屁股。)@amadan在这种情况下没关系,因为成员应该是对象。但很好地指出了局限性。