这里非常基本的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。 谢谢你的时间!
答案 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] );