javascript eval 以一种方式工作,但不是另一种方式,为什么?

问题描述

我正在尝试使用 eval 函数进行动态分配。我知道这是不好的做法,并且已修改代码以不使用 eval。尽管如此,我还是不明白为什么它以一种方式起作用,而另一种则不起作用。


这是有效的:
onFilterChosen(filterEmited: string,kind: string) {
    eval("this.dbParams." + kind + " = filterEmited");
} 

什么不起作用:
onFilterChosen(filterEmited: string,kind: string) {
    eval("this.dbParams." + kind + " = " + filterEmited);
} 

谁能告诉我第二种方法有什么问题?

解决方法

在第二个例子中,必须有一个变量名,它的名字是 filterEmited 的值。举个例子,我们调用函数:

onFilterChosen('filter','abc');

将导致在第一个示例中执行此 JS:

this.dbParams.abc = filterEmited

有效,因为参数称为 filterEmited。 而在第二个例子中,这将被执行:

this.dbParams.abc = filter;

而且由于没有变量“过滤器”,它可能会崩溃。

顺便说一句。发射是用两个 t 拼写的!