Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在获取JavaScript中的属性之前检查对象是否存在_Javascript - Fatal编程技术网

在获取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返回{},它将出错。不管怎样都是这样。如果那不是你说的或你的意思,我将删除你的参考。我道歉。我明白你现在说的了-这是它失败的另一个例子。。。删除我的评论:)