Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript eval以一种方式工作,但不能以另一种方式工作,为什么?_Javascript_Eval - Fatal编程技术网

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

javascript eval以一种方式工作,但不能以另一种方式工作,为什么?,javascript,eval,Javascript,Eval,我正在尝试使用eval函数进行动态赋值。我知道这是一种不好的做法,并修改了代码,不使用eval。尽管如此,我还是不明白为什么它以一种方式工作,而不是以另一种方式 以下是有效的方法: onFilterChosen(filterEmited: string, kind: string) { eval("this.dbParams." + kind + " = filterEmited"); } 什么不起作用: onFilterChosen(fi

我正在尝试使用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拼写

请提供一个。它可以双向工作,但在您的示例中传递给它的代码不同。感谢axiac&iota的响应。我理解利克尔的回答。哦,我太傻了。。。我已经研究这段代码很多天了,我下定决心,它只会以第一种方式工作,而不是第二种方式。。现在我知道我应该替换变量的值(就像我替换'kind')。谢谢你指出。。。我认为,这个问题不应该出现在StackOverflow上。而且。。。emitted应该用两个t拼写?我也会更正变量名。@TKtheLazyGuy我们都有这样的时间,你的问题被否决了,所以我认为它很好!