javascript eval 以一种方式工作,但不能以另一种方式工作,为什么?
javascript eval works one way but not the other, why?
我正在尝试使用 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;
并且由于没有变量“过滤器”,它可能会崩溃。
顺便说一句。 emitted 拼写为两个 t!
我正在尝试使用 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;
并且由于没有变量“过滤器”,它可能会崩溃。
顺便说一句。 emitted 拼写为两个 t!