在JavaScript中为eval赋值

时间:2015-06-29 21:43:31

标签: javascript variables eval

这里非常基本的JavaScript程序员!

我忙于使用如下变量的代码:

blocktype1;
blocktype2;
blocktype3;
blocktype4;
... //everything between blocktype4 and blocktype70, the three dots are not actual code!
blocktype70;

现在我在一个函数中使用了eval(),其中一个值给了一个blocktype变量。 blocktype取决于变量“number”。

这就是我对那部分的看法:

eval("blocktype" + number) = 3

我想要的是,说“数字”是27,然后我想变量blocktype27得到值3。 当我检查控制台时,它说:

  

ReferenceError:赋值中的左侧无效

有人可以帮助我吗? 我更喜欢vanilla JavaScript,仍然使用eval。 谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

'正确'的解决方案可能是use an Array,这是序列的理想选择,可以通过索引访问。

#Source: local data frame [2 x 9]

#  id1 id2  info 1_action_comment 1_action_time 2_action_comment 2_action_time 3_action_comment 3_action_time
#1   1   a info1         comment1         time1         comment2         time2         comment3         time3
#2   2   b info2         comment4         time4         comment5         time5               NA            NA

但是,properties can be accessed as with the bracket notation也是如此。这假定变量在全局范围内,因此是全局(窗口)对象的属性。

var number = 1;
var val = 3;
var blocktype = []; // so clean
blocktype[number] = val;

var blocktype1; // .. etc window["blocktype" + number] = val; 的问题与执行eval的问题实际上是无关的:只能将变量/属性分配给 1

但是f() = 3是一个内置函数,根据错误消息,的结果不能分配。 可以写成

eval

迅速暴露出一个带有eval的缺陷。如果var blocktype1; // .. etc (see dandavis' comment) eval("blocktype" + number + " = " + val); // What is actually eval'd is: // eval("blocktype1 = 3") 是字符串“Hello world!” with会导致val显然无效。

1 对于粗砂:赋值的左侧必须是Reference Specification Type,这是描述上述行为的更为冗长的方式。 (JavaScript函数不可能返回RST,尽管可以技术上为供应商主机对象完成。)

答案 1 :(得分:0)

随意不接受这个,因为它特别使用eval(),但是:

您可以像这样分配大小为71的数组:

var blocktype = new Array(71);

(您的number值显然从1开始,因此我们必须忽略第一个元素blocktype[0],并留出blocktype[70]的空间,第71个)

您现在可以分配如下元素:

blocktype[number] = 3;   

并像这样使用它们:

alert( blocktype[number] );