在获取JavaScript中的属性之前检查对象存在

时间:2015-10-23 14:53:44

标签: javascript

我正在研究一些看起来像这样的现有代码:

return this.getMyObject() && this.getMyObject().myArray[0];

据我所知,在返回myMrray属性中的第一项之前,检查getMyObject()返回的对象是否存在。这是如何工作的并且是好的形式?

更新:我的问题的原因来自对&&运算符如何用于返回属性值而不是布尔结果的混淆。在进一步思考之后,为了使其更具可读性,我重构了这一行:

return this.getMyObject() ? this.getMyObject().myArray[0] : undefined;

显然我在这里假设myArray属性将存在。

2 个答案:

答案 0 :(得分:0)

这是正确的形式。如果this.getMyObject()没有返回任何对象,则函数将返回false,在另一种情况下,第二部分条件将被执行并作为函数返回。在调用任何方法之前检查对象是否存在是一种很好的做法,因为如果不这样做就会发生错误。

但是,只有在您不确定是否存在时才应检查对象的存在。

答案 1 :(得分:0)

该代码因类型强制而起作用。有些人会告诉你它的好处,有些人会说总是用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检查时的含义,然后返回该值可能对其他人更具可读性,这也是我认为的一个加分