繁体   English   中英

遍历Javascript中的变量

[英]Iterating over variables in Javascript

我对块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;
   }
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等。

尝试

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] 希望您不会在全球范围内这样做,因为这会污染它。

尝试这个

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;
   }

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

您只能使用eval或全局对象(浏览器中的窗口对象)的属性来执行此操作。 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对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM