javascript - 检查可读深层对象的安全方法?

标签 javascript

我正在查看代码库,不幸的是看到了很多类似的代码:

if (module && module.foo && module.foo.bar && module.foo.bar.baz)

我开始在谷歌上搜索是否有一个库或其他东西可以让这种情况可以忍受;没有找到,但我仍然确定存在于某处)。我写得很快,但有点讨厌它,因为传递根对象和一个在“.”上分割的字符串很丑陋;希望有更好的东西:

<!DOCTYPE html>
<html>
<head>
   <title>safe tests</title>
   <script type="text/javascript">
       function assert(condition, desc) {
           var d = document, li = d.createElement("li");
           li.className = condition ? "pass" : "fail";
           li.appendChild(d.createTextNode(desc));
           d.getElementById('results').appendChild(li);
       }
   </script>
   <style type="text/css">
       #results li.pass { color: green; }
       #results li.fail{ color: red; }
   </style>
</head>
<body>
<ul id="results"></ul>
<script type="text/javascript">
function safe(root, s) {
    var split = s.split('.'), checked = root;
    for (var i = 0, len = split.length; i < len; i++) {
        if (checked[split[i]]) {
           checked = checked[split[i]];
           continue;
        } else {
           return false;
        }
    }
    return true;
}
var foo = {
    bar: {
        baz: {
            qux: 'yippie!'
        }
    }
}
assert(safe(foo, 'bar'), "finds first sub object");
assert(safe(foo, 'bar.baz'), "finds first and then second sub object");
assert(safe(foo, 'bar.baz.qux'), "finds first, second, third, sub object");
assert(!safe(foo, 'bar.baz.qux.NOT'), "rejects if not defined (end)");
assert(!safe(foo, 'NOPE.baz.qux.NOT'), "rejects if not defined (front)");
assert(!safe(foo, 'bar.NO.baz'), "rejects if not defined (middle)");
</script>
</body>
</html>

有任何已经处理此问题的精益建议或库吗?

最佳答案

function safe(str, O){
    var seg= str.split('.');
    O= O || window;
    while(O && seg.length) O= O[seg.shift()];
    return O;
}

与您的代码相同的想法,对于查找需要加载的代码模块最有用。

关于javascript - 检查可读深层对象的安全方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399305/

相关文章:

javascript - 如何使用 JavaScript 淡出/淡入背景图像?

javascript - Jquery - 如何在使用empty()选择器后恢复默认值

javascript - 在 nextjs 的非 react 组件中获取状态和更新状态

javascript - 使用 jquery 克隆()一个 html 表及其所有数据,包括选择及其选项和输入

javascript - 如何从 Google Apps 脚本中的服务器调用函数?

javascript - jQuery - 网格返回不均匀的行和列

javascript - react : Search Filter is not working Properly

javascript - preventDefault 在不同的浏览器中表现不一样

javascript - PassportJS session 不适用于自定义回调

javascript - react native 导航实验和 MapView 手势