Javascript - 只有在存在的情况下访问子属性的任何方法?

时间:2017-07-29 10:25:33

标签: javascript

我认为有类似的东西会很有用:

let data = { item : { subItem: { text: 'Nested thing' } } }

if(data.?item.?subItem.?text){
    //do something
}

这将是

的简写
if( data && data.item && data.item.subItem && data.item.subItem.text )

可以这样做吗?这会被称为什么?

2 个答案:

答案 0 :(得分:2)

目前你做这件事的方式是最好的(演讲,代码清晰度和可调试性),通常对象不会更深入嵌套。

更糟糕的选择是简单地访问该成员并使用try / catch构造继续。

然而,对于未来,有一个名为optional chaining计划的功能,它将直接提供您所谈论的功能。正如userqwert所述babel-plugin-transform-optional-chaining(目前处于alpha版),可以在短期内/现在使用该功能。

答案 1 :(得分:0)

这是我使用的功能

getValue(element,path) {
    "use strict";
    if (!Array.isArray(path)) {
        throw new Error("The first parameter must be an array");
    }
    for (var i = 0; i < path.length; i++) {
        if (typeof element == "object" && typeof element[path[i]] != "undefined") {
            element = element[path[i]];
        } else {
            return undefined;
        }
    }
    return element;
}

对于你的例子,应该这样调用

getValue(data,['item','subItem','text']);

虽然有一些退缩......但是这样做了。

如果您需要,可以使用它并找到一种方法使其直接在Object原型上工作。