使用 eval JavaScript 创建动态变量

Dynamic variable creation using eval JavaScript

本文关键字:动态 变量 创建 JavaScript eval 使用      更新时间:2023-09-26

我需要类似包含变量名称/元素ID配对的关联数组之类的东西。

循环遍历此数组/对象,将元素 ID 分配给与其对应的变量名称。像这样:

js小提琴

.HTML:

<input id="fld_1" class="input" type="text" value="bob" /><br>
<input id="fld_2" class="input" type="text" value="fred" /><br>
<input id="fld_3" class="input" type="text" value="pat" /><br>
<input id="mybutt" class="btn" type="button" value="Test" />

.JS:

objFields = {'f1':'fld_1', 'f2':'fld_2', 'f3':'fld_3'};
arrErrors = [];
$('#mybutt').click(function(){
    alert('iii');
    for (var key in objFields){
     //   eval(key = objFields[key]);
        eval(key) = objFields[key];
        alert('f1: ' +f1);
    }
});

不需要使用eval,我只需要将密钥转换为变量名即可。

我哪里做错了?

溶液

JCOC611说对了,但我不清楚我是如何问这个问题的。正如这个实现JCOC611解决方案的修订小提琴中所演示的那样,必须使用变量/字段名称来获取字段内容的值,如下所示:

$('#mybutt').click(function(){
    for (var key in objFields){
        var tmp = objFields[key];
        eval('var ' + key+ ' = $("#' +tmp+ '").val()');
    }
});

如果您知道自己在做什么并且绝对确定,请使用以下命令:

eval(key + " = " + JSON.stringify(objFields[key]));

或者,如果需要局部变量:

eval("var " + key + " = " + JSON.stringify(objFields[key]));

否则,我建议您实施其他答案之一。

你根本不需要那个eval(),你想避免它。您真正需要做的就是:

for (var key in objFields){
    alert(key+': '+objFields[key]);
    window[key] = objFields[key];
}

会给你:

'f1':'fld_1'
'f2':'fld_2'
'f3':'fld_3'

哪里:

f1 = 'fld_1';
f2 = 'fld_2';
f3 = 'fld_3';

如果是全局变量,则简单如下:

window[key] = objFields[key];

 window.key = objFields[key];

第二个免疫力稍差weird name

eval 函数运行字符串添加代码并返回结果。

您的代码所做的是评估未定义的模糊键,然后尝试将其设置为新值。就像写5=4;

正确的语法:

eval('var ' + key + ' = ' + objFields[key]);