簡體   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