Javascript 我应该使用eval()使变量声明成为动态的吗?

Javascript 我应该使用eval()使变量声明成为动态的吗?,javascript,reactjs,Javascript,Reactjs,我需要声明一些变量。如果我将变量名传递给函数,它应该声明所有变量。(变量可能用于实例化对象。)简短回答-您不应该这样做 长答案。 这是一种糟糕的方式,因为评估是一件非常危险的事情。您可以在这里阅读有关问题的内容- 此外,它还可能导致应用程序的糟糕设计。尝试用其他解决方案替换动态变量名。例如,对象属性 让我们看一下代码示例: 函数createObject(字段名、值){ 返回{ [字段名]:值 } } 在这段代码中,我们不使用eval,而是使用带有动态键的对象。您可以使用方括号动态声明变量而不使

我需要声明一些变量。如果我将变量名传递给函数,它应该声明所有变量。(变量可能用于实例化对象。)

简短回答-您不应该这样做

长答案。

这是一种糟糕的方式,因为评估是一件非常危险的事情。您可以在这里阅读有关问题的内容-

此外,它还可能导致应用程序的糟糕设计。尝试用其他解决方案替换动态变量名。例如,对象属性

让我们看一下代码示例:

函数createObject(字段名、值){
返回{
[字段名]:值
}
}

在这段代码中,我们不使用eval,而是使用带有动态键的对象。

您可以使用方括号动态声明变量而不使用eval:

var variableName = 'someVariable';

someObject[variableName] = 'some value';

eval是邪恶的。从不使用你有它的用例吗?不要使用它。医生字面上说永远不要使用它!为什么需要使变量名成为动态的?为什么变量名更重要?当您的代码被修改时,变量名将被更改为一个字母。“我需要声明一些变量。”然后声明它们。“如果我将变量名传递给一个函数,它应该声明所有变量。”改为传递一个对象。否则,函数将与调用方式完全耦合。如果您有
函数myFunction(varName){/*从varName*/console.log(foo)}
动态创建一个变量,并期望它只对
myFunction(“foo”)
起作用,那么动态创建是完全无用的。您不能调用
myFunction(“bar”)
,因为这会导致错误。只允许使用您期望的变量名。为什么不直接声明它们呢?这不是变量声明,它是一个对象属性。是的,但全局变量不是窗口对象的属性吗?尽管如此,该示例可能还是非常有用。全局
var
声明变量添加到全局对象中,是的,但是
let
const
变量未添加到全局对象中,它们只存在于全局空间中。因此,混淆属性和变量的概念可能会有问题,因为它们不一样,也不总是以相同的方式工作。