3

我只是想知道是否可以for loop在 Javascript 中使用 a 声明多个变量。

示例:我有 4 个<article>元素,其 Id 为article1 article2 article3article4。我不想单独声明每个变量,而是想在一个循环中进行(因为它们使用基本上相同的代码,我不想重复自己!)。

就像是:

window.ready = function(){
    for (var i=1; i<=4; i++){

            var article[i] = document.getElementById("article" + i);

        }
}

上面返回了一个带有意想不到的错误[,所以我的语法必须关闭(我对 JS 很陌生),但是(a)这是在正确的轨道上(b)如果我在 a 中运行它们,这些将是全局变量window.ready 函数?

4

6 回答 6

6

不能用[char 设置变量名。使用它,您将获得 javascript 的异常。您可以使用 List/Array 来执行此操作,尝试使用 Array 类,例如:

window.ready = function() {

   var articles = new Array();

   for (var i=1; i<=4; i++){

      articles[i] = document.getElementById("article" + i);

   }
}

使用 Array 类,您不需要指定长度,但如果需要,您可以在构造函数中设置它。

var articles = new Array(4);

另一种方法是使用该push方法在数组上添加元素,例如:

window.ready = function() {

   var articles = []; // define an empty array

   for (var i=1; i<=4; i++){

      articles.push(document.getElementById("article" + i));

   }
}
于 2012-12-13T10:47:05.870 回答
4

首先,重要的是要注意 JavaScript 函数具有函数作用域而不是块作用域,这意味着“文章”不是您的 for 循环所独有的。因此,var article在你的for块中声明可能会误导运行时实际发生的事情。

为了实现你所追求的,以下应该工作:

window.ready = function(){
    var article = [];
    for (var i=1; i<=4; i++){

            article.push(document.getElementById("article" + i));

        }
}

参考

于 2012-12-13T10:48:52.510 回答
2

每次循环时,您都在创建一个新的文章数组。

在进入“for”循环之前创建一个文章数组。

article = new Array(4);
    for (var i=1; i<=article.length; i++){

            article[i] = document.getElementById("article" + i);

        }
于 2012-12-13T10:47:56.413 回答
1

您可以尝试使用eval

for (var i = 1; i <= 4; i++) {
    eval( 'var article'+i+' = document.getElementById("article' + i +'");' );
}

这将像普通变量一样工作,它们仅在本地范围内可见。不过,这可能是一种不好的做法,因此只需创建一个数组或哈希表来存储动态变量。

于 2012-12-13T10:49:15.477 回答
1

取而代之的是,您可以抓住所有<article>元素:

var articles = document.getElementsByTagName("article");

// access them in a loop
for(var i=0; i<articles.length; i++)
{
    console.log("Hey I'm " + articles[i].id);
}
于 2012-12-13T10:52:07.430 回答
0

在使用数组前声明数组 Ex : var article = []; // 较短版本的 new Array() 然后按原样编写您的代码...

希望这会有所帮助

于 2012-12-13T10:49:23.877 回答