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()
。这些就是选择。我想避免变量的数据结构。我可以避免把变量放在水果里吗?不可以。你需要一个对象来完成这项工作。你不想要对象有什么原因吗?我想避免变量的数据结构。我可以避免把变量放在水果里吗?不可以。你需要一个对象来完成这项工作。你不想要东西有什么原因吗?