Javascript 尝试返回动态Var值时避免Eval()

Javascript 尝试返回动态Var值时避免Eval(),javascript,Javascript,我的生活中有一些密码。我有一个函数getValue(),它将动态返回IIFE中声明的变量的值。我正在寻找一种替代方案,可以在不重新组织变量数据结构的情况下使用eval() 注意-我试图避免将变量放入对象(即-fruit)中 这个怎么样 (函数(){ 变量水果={ 苹果:“苹果!!”, 香蕉:“香蕉!!”, 黄瓜:“黄瓜!!” }; 函数getValue(键){ return fruit[key];//我可以避免使用eval()吗? } console.log(getValue('apple')

我的生活中有一些密码。我有一个函数
getValue()
,它将动态返回IIFE中声明的变量的值。我正在寻找一种替代方案,可以在不重新组织变量数据结构的情况下使用
eval()

注意-我试图避免将变量放入对象(即-fruit)中

这个怎么样

(函数(){
变量水果={
苹果:“苹果!!”,
香蕉:“香蕉!!”,
黄瓜:“黄瓜!!”
};
函数getValue(键){
return fruit[key];//我可以避免使用eval()吗?
}
console.log(getValue('apple');//苹果!!
})();这个怎么样

(函数(){
变量水果={
苹果:“苹果!!”,
香蕉:“香蕉!!”,
黄瓜:“黄瓜!!”
};
函数getValue(键){
return fruit[key];//我可以避免使用eval()吗?
}
console.log(getValue('apple');//苹果!!

})();如果您枚举并复制所有有效的变量名,则有可能:

(function() {

    var apple = 'Apples!!',
        banana = 'Bananas!!',
        cucumber = 'Cucumbers!!';

    function getValue(key) {
        var vals = { apple: apple, banana: banana, cucumber: cucumber};
        return vals[ key];
    }

    console.log(getValue('apple')); //Apples!!

})();

您还可以通过验证参数值来考虑使用<代码> EVA:

(function() {

    var apple = 'Apples!!',
        banana = 'Bananas!!',
        cucumber = 'Cucumbers!!';

    var publicVars = ["apple", "banana", "cucumber"];

    function getValue(key) {
        if(publicVars.indexOf(key) < 0)
            throw new Error("Invalid variable name for getValue: " + key);
        return eval(key);
    }


    console.log(getValue('apple')); //Apples!!

})();
(函数(){
var apple='Apples!!',
香蕉='香蕉!!',
黄瓜=‘黄瓜!!’;
var publicVars=[“苹果”、“香蕉”、“黄瓜”];
函数getValue(键){
if(publicVars.indexOf(key)<0)
抛出新错误(“getValue的变量名无效:”+键);
返回eval(键);
}
console.log(getValue('apple');//苹果!!
})();


脚注:上述示例旨在将程序维护的客户成本降至最低。不建议使用它们(而不是建议的“水果”对象)设计新项目。

如果枚举并复制所有有效变量名,则有可能:

(function() {

    var apple = 'Apples!!',
        banana = 'Bananas!!',
        cucumber = 'Cucumbers!!';

    function getValue(key) {
        var vals = { apple: apple, banana: banana, cucumber: cucumber};
        return vals[ key];
    }

    console.log(getValue('apple')); //Apples!!

})();

您还可以通过验证参数值来考虑使用<代码> EVA:

(function() {

    var apple = 'Apples!!',
        banana = 'Bananas!!',
        cucumber = 'Cucumbers!!';

    var publicVars = ["apple", "banana", "cucumber"];

    function getValue(key) {
        if(publicVars.indexOf(key) < 0)
            throw new Error("Invalid variable name for getValue: " + key);
        return eval(key);
    }


    console.log(getValue('apple')); //Apples!!

})();
(函数(){
var apple='Apples!!',
香蕉='香蕉!!',
黄瓜=‘黄瓜!!’;
var publicVars=[“苹果”、“香蕉”、“黄瓜”];
函数getValue(键){
if(publicVars.indexOf(key)<0)
抛出新错误(“getValue的变量名无效:”+键);
返回eval(键);
}
console.log(getValue('apple');//苹果!!
})();


脚注:上述示例旨在将程序维护的客户成本降至最低。与建议的“水果”对象相反,不建议使用它们设计新项目。

首先不要使用变量。使用对象将名称映射到值。@Barmar您的意思是将我的变量放入另一个对象(即-fruit)中吗?我试图避免改变变量的数据结构。是的,这就是我的意思。你试图做的只是错误的方式。变量名是为程序员准备的,它们不应该是应用程序数据的一部分。请参阅:首先不要使用变量。使用对象将名称映射到值。@Barmar您的意思是将我的变量放入另一个对象(即-fruit)中吗?我试图避免改变变量的数据结构。是的,这就是我的意思。你试图做的只是错误的方式。变量名是给程序员的,它们不应该是应用程序数据的一部分。请参阅:我想避免变量的数据结构。我能避免把变量放在水果里吗?@Jon这就是人们通常在JavaScript中做你所要求的事情的方式。您不想使用散列有什么特别的原因吗?@Jon-除了使用
eval()
之外,无法通过字符串名访问普通的局部变量。Javascript不支持通过名称直接访问它们的任何其他方式。因此,您可以将它们放入一个对象中,通过属性名访问它们,或者使用
eval()
。这些就是选择。我想避免变量的数据结构。我能避免把变量放在水果里吗?@Jon这就是人们通常在JavaScript中做你所要求的事情的方式。您不想使用散列有什么特别的原因吗?@Jon-除了使用
eval()
之外,无法通过字符串名访问普通的局部变量。Javascript不支持通过名称直接访问它们的任何其他方式。因此,您可以将它们放入一个对象中,通过属性名访问它们,或者使用
eval()
。这些就是选择。我想避免变量的数据结构。我可以避免把变量放在水果里吗?不可以。你需要一个对象来完成这项工作。你不想要对象有什么原因吗?我想避免变量的数据结构。我可以避免把变量放在水果里吗?不可以。你需要一个对象来完成这项工作。你不想要东西有什么原因吗?