gpt4 book ai didi

javascript - 在对象中设置深层嵌套属性时,使用 eval 是否合适?

转载 作者:行者123 更新时间:2023-12-03 11:43:22 25 4
gpt4 key购买 nike

我正在编写一个函数,它将接受一个对象并修改该对象内的字段(可能是嵌套字段)。例如,modifyObj(obj, 'nested.nested', 2) 本质上会执行 obj.nested.nested = 2。最直接的方法似乎是使用 eval,但共识似乎是使用 eval 是邪恶的? http://jsfiddle.net/zntf6bfw/

function modifyObj(obj, field, val) {
var str = 'obj.' + field + '=' + val;
eval(str);
}

另一种方法是使用正则表达式来确定传入的字段是否是嵌套的,如果是,则使用循环来获取嵌套对象并修改它(这将修改整个对象)。然而,这似乎不必要地复杂,这是否算作 eval 的有效用例?

function modifyObj2(obj, field, val) {
//if we are modifying a nested val
if (/\./g.test(field)) {
var arr = field.split('.'),
temp = obj;
//we want temp to be equal to the nested object holding the nested field to be modified and changing this will modify the passed in object
for (var i = 0; i < arr.length - 1; i++) {
temp = temp[arr[i]];
}
temp[arr.length - 1] = val;
}
//if we are modifying a non-nested val
else {
obj[field] = val;
};
}

最佳答案

Is using eval appropriate when setting deeply nested properties in an object?

没有。

它使脚本容易出现编码错误,这些错误可能会变成安全漏洞。

真正的问题是您遇到的什么问题会让您相信 eval 是一个合理的解决方案。考虑以下代码:

普通 JS:
obj.foo.bar.baz.fizz.buzz = val;
你的modifyObj函数:
modifyObj(obj, 'foo.bar.baz.fizz.buzz', val);

两者之一简洁,易读,易调试,易理解,运行速度很快。另一个是您的 modifyObj 函数。

关于javascript - 在对象中设置深层嵌套属性时,使用 eval 是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165379/

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