gpt4 book ai didi

javascript - 由于缩小而替代 eval() 函数

转载 作者:行者123 更新时间:2023-12-01 05:30:32 25 4
gpt4 key购买 nike

我想这样创建一个对象:

var new_obj = {},
array_path = '',
the_value = 3;

array_path = '[\''fruits'\'][\''banana'\'][\''value'\']'; // unknown on runtime
eval('new_obj' + array_path + ' = ' + the_value + ';');

不幸的是,缩小后“new_obj”参数将与 new_obj 变量不匹配。我无法找出另一种方法来完成我想要的事情,因为 array_path 结构在运行时对我来说是未知的。有什么想法可以避免使用 eval() 函数吗?

最佳答案

如果我正确理解你的问题,这可能就是你正在寻找的:

var set_value = function(obj, path, value) {
var limit = path.length;
// You might want to check if limit is 0 here.
for (var i = 0; i < limit-1; i++) {
var key = path[i];
if (!obj.hasOwnProperty(key)) {
// Depending on your case you might throw an error
// here or do something else
obj[key] = {};
}
obj = obj[key];
}
obj[path[limit-1]] = value;
};

及用法:

var new_obj = {},
array_path = ['foo', 'bar', 'test'],
the_value = 3;

set_value(new_obj, array_path, the_value);

因此,您所要做的就是将 array_path 转换为上述格式。如果您将其作为字符串接收,那么一些正则表达式可能会有所帮助。不过,如果您可以控制源,那么只需确保它是一个 JSON 数组即可。

顺便说一句:不要像上面那样使用 hackish(或任何)评估。缩小是最小的问题。如果您无法控制源(始终假设您无法控制源是一个很好的做法),那么您目前面临着巨大的安全问题。有人可以轻松地将有害的 JavaScript 注入(inject)您的代码中。

关于javascript - 由于缩小而替代 eval() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37808244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com