用于返回Javascript对象深处的属性值的方法的比较

斯蒂芬·梅尔文

考虑以下company对象:

var employee = {
    empID: 45435,
    salary: 44000,
    title: "Janitor",
    firstName: "Richard",
    lastName: "Stallman"
}

var department = {
    name: "Maintenance",
    building: "H",
    room: 404,
    departmentLead: employee
}

var company = {
    name: "Bluth's Original Frozen Banana Stand",
    revenue: 'always',
    maintenanceDept: department
}

如果我想访问该对象title属性,则employee可以通过以下方式引用它:

var title = company.maintenanceDept.departmentLead.title;

但是,如果departmentLeadundefinedTypeError则会抛出a。因此,在访问之前,我必须编写一个测试title

if(company && 
   company.maintenanceDept && 
   company.maintenanceDept.departmentLead &&
   company.maintenanceDept.departmentLead.title){ ... }

这是最好的方法吗?显然,此示例是人为设计的,因为我company在使用它之前就已对其进行了定义,所以我知道它是title存在的。对于company从AJAX调用返回对象,不能说相同的话。一个解决方案我一直在使用一直以:

// Edit: I've been informed adding properties to Object.prototype is not a smart thing to do...so don't do this
Object.prototype.propertyWithPath = function (path) {
    var keys = path.split('.');
    var parent = this;
    var child;

    for (var i = 0; i < keys.length; i++) {
        child = keys[i];

        if (parent[child] === undefined) {
            return undefined;
        }
        parent = parent[child];
    }
    return parent;
};

除了性能下降外,使用这种方法与替代方法相比还有其他缺点吗?

TJ人群

您可以选择进行内联测试,也可以使用与显示的功能相似的功能。(但请参见以下问题的评论:切勿在上添加可枚举的属性Object.prototype。请改用非原型函数。)

请注意,测试不一定是if,您可以执行以下操作:

var title = company && 
            company.maintenanceDept && 
            company.maintenanceDept.departmentLead &&
            company.maintenanceDept.departmentLead.title;

titleundefined因为JavaScript的&&运算符非常强大,所以它要么是(或另一个falsey值),要么是标题:如果左侧的值为falsey,则返回该值;否则为false。否则,它返回右侧的值。它并不总是返回truefalse因为它会在许多其他语言。所以5 && 77; 0 && 70

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用于搜索对象属性和返回值的javascript函数

javascript按值查找嵌套对象/数组的深处

javascript返回对象的属性和值对

Javascript对象:如何使用值返回属性?

如何确保“ Map”或“ Set” JavaScript集合的“具有”方法按属性值比较对象?

迭代 JavaScript 对象,比较值和返回键

如何比较对象中的元素并返回较高的值?* JavaScript *

将对象属性键与数组中的对象属性值进行比较,返回“总点数”

Javascript - 如何比较数组中对象的属性值

Javascript比较2个对象数组的属性值

JavaScript:如何通过嵌套在对象2级深处的值过滤数组

将变量或属性值传递给 JavaScript 对象中的方法返回“未定义”

Javascript 从 Javascript 对象属性返回不正确的值

Javascript:在数组深处修改值

用于确定 JavaScript 对象中属性值的异步函数

比较对象的属性值而不是对象类型

连接对象属性的值将返回NaN(Javascript)

javascript根据条件从对象的嵌套数组返回属性值

比较值与两个javascript对象的最佳方法

JavaScript比较对象中的值

根据属性返回对象值

比较对象值并返回新数组

比较Kotlin中对象的通用属性值

比较对象的 javascript 数组并设置适用于主数组源的添加和删除的特定值

foreach返回对象属性javascript

比较Javascript数组对象并返回最接近的对

比较2个“精确” JavaScript对象值时,为什么Object.is()返回false?

比较两个JavaScript对象并提取匹配属性的键和值

JavaScript对象的值返回null