javascript - 多个嵌套对象的 eval() 替代方法

标签 javascript eval

我正在尝试为我正在使用的 HTML 应用程序创建一个通用的 i18n 解决方案。我正在寻找使用 eval() 调用深度嵌套的 Javascript 对象的替代方法:

假设以下 HTML 示例:

<div id="page1">
  <h1 data-i18n="html.pageOne.pageTitle"></h1>
</div>

及其配套的 Javascript(使用 jQuery):

var i18n;

i18n = {
  html: {
     pageOne: {
       pageTitle: 'Lorem Ipsum!'
     }
  }
};

$(document).ready(function () {
  $('[data-18n]').each(function () {
    var q;

    q = eval('i18n.' + $(this).attr('data-i18n'));
    if (q) {
      $(this).text(q);
    }
  });
});

关于如何在不使用 eval() 的情况下访问 i18n 对象内的“pageTitle”属性的任何建议?我需要保留对象的结构,因此将其布局更改为“平面”解决方案是不可行的。

谢谢!!!

最佳答案

您可以使用括号语法,正如其他人所暗示的那样。但是,您需要在 处进行拆分和迭代。:

function lookup(obj, path) {
    var keys = path.split('.'),
        result = obj;

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

        // exit early if `null` or `undefined`
        if (result == null)
            return result;
    }

    return result;
}

然后:

q = lookup(i18n, $(this).attr('data-i18n'));
if (q) {
  $(this).text(q);
}

关于javascript - 多个嵌套对象的 eval() 替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893983/

相关文章:

javascript - 是什么决定了一个事件是否传递给了我在 javascript 中的函数?

php - 如何在数学上评估像 "2-1"这样的字符串以产生 "1"?

javascript - 仅删除父级的属性?

javascript - 在追加中调用删除按钮

javascript - 如何从函数参数谷歌脚本创建文件夹

events - NodeJS process.stdin `end` 事件中断 http.server 操作

makefile - make-在同一个eval调用中定义多个变量

javascript - 如何使用 jQuery 淡入附加的 HTML?

java - 为什么 eval 类给我一个从 int 到 double 的转换错误?

python - 在 eval [Python 3.4.2] 中使用用户定义的变量/函数?