gpt4 book ai didi

JavaScript:通过名称查找变量的值,eval 在这里可以接受吗?

转载 作者:行者123 更新时间:2023-12-02 22:21:21 24 4
gpt4 key购买 nike

警告:正如其他人在此所述,此问题是基于不灵活的客户需求。虽然问题是有效的,但如果可能的话,您绝对应该使用更简单的解决方案(例如:将设置放在单个对象中)!

我有一组我想要“留意”的变量。也就是说:如果它们之前在代码中定义过,我需要能够对它们的值进行操作。

var a = 'foo'; // only a gets defined

// ...more code here... IMPORTANT: I can only control what comes BELOW this line!

var target = 'exmple.com/?';
var gets = ['a', 'b', 'c']; // these are the names of the variables I want to check for

gets.forEach(function(element) { // checking each one
if(typeof element !== 'undefined') { // if it's previously defined
target += "&"+element+"="+eval(element); // add `&a=foo` to target
}
});

alert(target);

我希望打印警报 example.com/?&a=foo

我已经看到了大量不使用 eval 函数的其他答案,并且我已经尝试过 window[element] 但没有成功。最好如何做到这一点,而不必为我想要检查的每个变量编写 if/else?

最佳答案

假设您别无选择,并且所有内容都位于全局范围内,则您可以不求助于使用 eval()。 (我很确定 eval 一定有一些有效的用例,但我认为这不是其中之一。)

由于您不应该信任这些变量的内容,因此您不应该使用eval。如果您的客户选择受到影响怎么办? (或者只是您的客户不知道他们在做什么。)

var css_color = 'tweet(document.cookie)';

您可以简单地利用变量可从全局范围访问的事实:

const serialize_options = (...vars) =>
vars
.filter(v => typeof this[v] !== 'undefined')
.map(v => `${v}=${this[v]}`)
.join('&');

console.log(serialize_options('a'));
console.log(serialize_options('a', 'b'));
console.log(serialize_options('a', 'b', 'c'));
console.log(serialize_options('a', 'x', 'y'));
<script>
var a = '10';
var b = '20';
var c = '30';
</script>

关于JavaScript:通过名称查找变量的值,eval 在这里可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219378/

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