在javascript中组合字符串-ReferenceError:左侧的赋值无效

在javascript中组合字符串-ReferenceError:左侧的赋值无效,javascript,syntax,Javascript,Syntax,我做错了什么 function F2() { for(i = 1; i < 7; i++) { ('zone'+i+'Data') = ('1'+document.getElementById('Z'+i+'Operate').value + document.getElementById('Z'+i+'OnTimeH').value + document.getElementById('Z'+i+'OnTimeM')

我做错了什么

function F2()
{
    for(i = 1; i < 7; i++)
        {
        ('zone'+i+'Data') = ('1'+document.getElementById('Z'+i+'Operate').value +
        document.getElementById('Z'+i+'OnTimeH').value +
        document.getElementById('Z'+i+'OnTimeM').value +
        document.getElementById('Z'+i+'Duration').value +
        document.getElementById('Z'+i+'Repeat').value +
        document.getElementById('Z'+i+'Extra').value);

        ('op'+i).innerHTML = ('zone'+i+'Data');
        }
}
函数F2()
{
对于(i=1;i<7;i++)
{
('zone'+i+'Data')=('1'+document.getElementById('Z'+i+'Operate')。值+
document.getElementById('Z'+i+'OnTimeH').value+
document.getElementById('Z'+i+'OnTimeM').value+
document.getElementById('Z'+i+'Duration')。值+
document.getElementById('Z'+i+'Repeat').value+
document.getElementById('Z'+i+'Extra').value);
('op'+i).innerHTML=('zone'+i+'Data');
}
}
zone1Data、zone2Data等在外部声明。如果我不运行循环并使用zone1Data=而不是('zone'+I+'Data')=它工作正常,因此我认为我的语法有问题。。。。可能也是最后一行

你知道怎么做吗

('zone'+i+'Data') =
指定动态变量的方法无效

使用带有变量名的数组表示法创建新变量

window['zone'+i+'Data'] = "something";
this['zone'+i+'Data'] = "something"
someOtherObject['zone'+i+'Data'] = "something";
然后可以使用点符号来访问它

console.log( window.zone0Data );
console.log( this.zone0Data );
console.log( someOtherObject.zone0Data );
我会避免使用
窗口,因为这会污染全局名称空间

正如Ingo Bürk所提到的,最好将它们放入一个数组中

var zoneData = new Array();

for(i = 1; i < 7; i++) {
   zoneData[i] = ('1'+document.getElementById('Z'+i+'Operate').value +
        document.getElementById('Z'+i+'OnTimeH').value +
        document.getElementById('Z'+i+'OnTimeM').value +
        document.getElementById('Z'+i+'Duration').value +
        document.getElementById('Z'+i+'Repeat').value +
        document.getElementById('Z'+i+'Extra').value);
}
指定动态变量的方法无效

使用带有变量名的数组表示法创建新变量

window['zone'+i+'Data'] = "something";
this['zone'+i+'Data'] = "something"
someOtherObject['zone'+i+'Data'] = "something";
然后可以使用点符号来访问它

console.log( window.zone0Data );
console.log( this.zone0Data );
console.log( someOtherObject.zone0Data );
我会避免使用
窗口,因为这会污染全局名称空间

正如Ingo Bürk所提到的,最好将它们放入一个数组中

var zoneData = new Array();

for(i = 1; i < 7; i++) {
   zoneData[i] = ('1'+document.getElementById('Z'+i+'Operate').value +
        document.getElementById('Z'+i+'OnTimeH').value +
        document.getElementById('Z'+i+'OnTimeM').value +
        document.getElementById('Z'+i+'Duration').value +
        document.getElementById('Z'+i+'Repeat').value +
        document.getElementById('Z'+i+'Extra').value);
}

('zone'+i+'Data')
是变量名吗?我认为这是不允许的。@Harry Zone1Data是一个变量名,我想我可以这样把它组合起来。我明白了。顺便问一下,Patrick Evans已经在下面发布了解决方案。
('zone'+i+'Data')
是一个变量名吗?我认为这是不允许的。@Harry Zone1Data是一个变量名,我想我可以这样把它组合起来。我明白了。顺便说一下,Patrick Evans已经在下面发布了解决方案。更好的是,避免动态命名变量,而只使用数组。动态变量名是一种糟糕的做法,因为名称是一个内部细节,对功能来说应该无关紧要。如果是这样,请重新考虑您的设计。@Patrick Evans-谢谢您,我将尝试数组,正如您和Ingo所说,这是一种更好的方法。更好的是,避免动态命名变量,而只使用数组。动态变量名是一种糟糕的做法,因为名称是一个内部细节,对功能来说应该无关紧要。如果是这样,请重新考虑您的设计。@Patrick Evans-谢谢您,我将尝试阵列,因为您和Ingo说这是一种更好的方式。