javascript - 避免长点符号链的模式

标签 javascript

当使用点表示法访问嵌套对象时,我总是必须确保前一个对象存在,这会让人精疲力尽。

我基本上想避免像这样的 long if 链

if (a && a.b && a.b.c && a.b.c[0] ... ) { v = a.b.c[0]; }

我唯一能想到的另一件事是通过使用 try catch。

var v; try { v = a.b.c[0].d.e; } catch (e) {}

有更好的模式吗?

最佳答案

我认为您已经有了两个最漂亮的解决方案。

但请注意,对于诸如 obj.obj.string.length 之类的情况,如果 string === "",您的第一个解决方案将失败。由于空字符串是错误的,它会触发 && 守卫。

但是说到字符串,您可以做类似的事情:

function getNestedProperty(obj, propChain) {
    var props = propChain.slice(0), prop = props.shift();
    if(typeof obj[prop] !== "undefined") {
        if(props.length) {
            return getNestedProperty(obj[prop], props);
        } else {
            return obj[prop];
        }
    }
}

var v = getNestedProperty(a, ["b", "c", 0, "d", "e"]);

是的...不太漂亮:P

我想说,在提出的解决方案中,try...catch 可能是最简单的方法

关于javascript - 避免长点符号链的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795594/

相关文章:

javascript - 使用jquery生成html表时设置下拉选择值

javascript - 为什么这个算法着色器有不好的锯齿现象

javascript - 使用 Javascript 验证包含阿拉伯字符的密码输入

javascript - 将文本附加到单个文本区域 - 按段落分隔(使用 javascript)

javascript - 使用 AJAX XMLHttpRequest 填充 DataTable 的主体

javascript - 如何选择两个元素之间的所有元素

javascript - 使用 KendoUI 的堆积图

javascript - node.js 字体无法正常工作并且没有显示错误

javascript - ReactJS - 为什么我的输入栏的样式没有根据 setState 改变?

javascript - @angular/cli 4 不会安装在 debian 上