在获取JavaScript中的属性之前检查对象是否存在
我正在编写一些现有的代码,看起来像这样:在获取JavaScript中的属性之前检查对象是否存在,javascript,Javascript,我正在编写一些现有的代码,看起来像这样: return this.getMyObject() && this.getMyObject().myArray[0]; 据我所知,它正在检查getMyObject()返回的对象是否存在,然后再返回myArray属性中的第一项。这是如何工作的?它的形式好吗 更新:我提出问题的原因是对如何使用&&运算符返回属性值而不是布尔结果的混淆。经过进一步思考,为了使其更具可读性,我将该行重构为: 返回这个.getMyObject()?this.get
return this.getMyObject() && this.getMyObject().myArray[0];
据我所知,它正在检查getMyObject()返回的对象是否存在,然后再返回myArray属性中的第一项。这是如何工作的?它的形式好吗
更新:我提出问题的原因是对如何使用&&
运算符返回属性值而不是布尔结果的混淆。经过进一步思考,为了使其更具可读性,我将该行重构为:
返回这个.getMyObject()?this.getMyObject().myArray[0]:未定义代码>
显然,我在这里假设myArray
属性将存在 这是正确的形式。如果this.getMyObject()未返回任何对象,则函数将返回false
,在另一种情况下,将执行条件的第二部分并作为函数的结果返回。最好在调用对象上的任何方法之前检查对象是否存在,因为如果不这样做,可能会发生错误
但是,只有在不确定对象是否存在时,才应该检查该对象是否存在。该代码由于类型强制而工作。有些人会告诉你这很好,有些人会说总是用typeof检查一些东西
if (typeof someVariable === 'undefined')
即使在下面的例子中,上述检查也是不够的。我不知道什么更好,但就我而言,这段代码不是我自己如何编写的,而是被很多javascript开发人员所接受。有时,条件正确的代码仍然可以通过第一次检查,但在访问属性时抛出错误。对我来说,这取决于你的处境如何控制,这决定了你是否应该允许
通过第一次检查但失败的示例:
var myObject = 1;
var test = myObject && myObject.myArray[0];
或者正如@JamesThorpe在上面的评论中指出的那样:
var myObject = {};
var test = myObject && myObject.myArray[0];
另外,熟悉某些编码语言但不熟悉JS的人可能会看这些代码,不理解它的含义,如果使用if检查然后返回值,其他人可能会更容易理解,这也是一个优点。我认为可以使用typeof
()-它解释了&&
运算符在这种情况下的用法。它似乎将布尔结果与动作混合在一起,这让我感到很困惑@杰姆斯索普哦,对不起。我想我看到您看到了如果getMyObject返回{},它将出错。不管怎样都是这样。如果那不是你说的或你的意思,我将删除你的参考。我道歉。我明白你现在说的了-这是它失败的另一个例子。。。删除我的评论:)