在Javascript中迭代变量

时间:2014-01-24 01:47:12

标签: javascript for-loop

我在第2块的目标是通过在for循环中定义javascript变量来简化我现有的第1块代码。下面的代码在控制台中给出了错误“Unexpected token [”。我不确定我在这里使用正确的语法。有没有办法循环遍历数组并动态插入每个数组以获得块1的所需结果?

我能够在第2块中安装console.log details_object [i]并成功查看所有数组元素,但这是我可以得到的。

   /*Block 1*/

   /*var title = document.getElementById('title').value;
   var phone = document.getElementById('phone').value;
   var firstn = document.getElementById('firstn').value;
   var lastn = document.getElementById('lastn').value;
   var displayn = document.getElementById('displayn').value;*/

   /*Block 2 less code!*/

   var details_object = ["title", "phone", "firstn", "lastn", "displayn"];

   for(var i=0, l = details_object.length; i < l; i++){
     var details_object[i] = document.getElementById("'"+details_object[i]+"'").value;
   }

4 个答案:

答案 0 :(得分:1)

var details_object[i] = document.getElementById("'"+details_object[i]+"'").value;
 ^---// Delete this var

这就是导致错误的原因。你可能想要这样的东西:

var details_object = ["title", "phone", "firstn", "lastn", "displayn"];
var obj = {};

for(var i=0, l = details_object.length; i < l; i++){
  obj[details_object[i]] = document.getElementById(details_object[i]).value;
}

现在可以访问obj.titleobj.phone

答案 1 :(得分:1)

尝试

var scope = this;
for(var i=0, l = details_object.length; i < l; i++){
     scope[details_object[i]] = document.getElementById(details_object[i]).value;
}

这将创建一个名称存储在details_object[i]中的变量到当前作用域中。希望你不要在全球范围内这样做,因为这会污染它。

答案 2 :(得分:0)

试试这个

var details_object = ["title", "phone", "firstn", "lastn", "displayn"];
for(var i=0, l = details_object.length; i < l; i++){
     window[details_object[i]] = document.getElementById("'"+details_object[i]+"'").value;
   }

答案 3 :(得分:0)

  

我在第2块的目标是通过在for循环中定义javascript变量来简化我现有的第1块代码

您只能使用 eval 或全局对象的属性(浏览器中的 window 对象)执行此操作。 Javascript不允许访问本地变量对象,因此您无法直接寻址其属性。您只能使用首先在当前执行上下文中解析的标识符名称(在局部变量对象上或多或少)来访问它们,然后在具有外部执行上下文变量的作用域链上(如果有)。

例外是全局变量是全局对象的属性。可以使用方括号表示法创建和访问它们,但是通过赋值创建的全局属性与使用声明创建的属性有细微差别(例如,无法删除已声明的全局变量,通过赋值创建的属性)。

因此,如果您乐意创建全局对象的原则,您可以这样做:

// In global code
var global = this;

// Anywhere you wish to create, read or assign to a global property
global[whatever] ...   // using an identifier whose value resolves to a string
global['whatever'] ... // using a string
global[foo()] ...      // using some other type of expression that returns a string

然而,为这些属性创建单个对象被认为是更好的做法,以避免命名与全局对象的属性冲突的可能性,例如,

var myVars = {}

myVars[varName]  = varValue;

否则,您可以使用 eval 在功能代码中创建局部变量:

eval('var ' + whatever + ' = 3');
alert(whatever); // 3

但是,不建议这样做。最好使用通过闭包,继承或全局变量共享的 myVars 对象。