2014-05-25 21 views
-2

我正在关注一本JavaScript书籍,并尝试以我自己的方式重新实现书本代码示例。JavaScript循环无法识别全局变量

我不断收到所有相同的test1

 <script> 

     var test1 = "abcdef"; 
     var test2 = 123; 
     var test3 = true; 
     var test4 = {}; 
     var test5 = []; 
     var test6; 
     var test7 = { "abcdef": 123 }; 
     var test8 = ["abcdef", 123]; 
     function test9() { return "abcdef" }; 

     for (var i = 0 ; i < 10 ; i++) { 

      var probe = test[i]; 
      alert((typeof probe).toString); 

     } 

    </script> 
+4

'test' ISN没有定义。没有你的变量有这个名字。 – Moob

+2

...和'.toString'是一个属性。您可能想将其称为函数(或完全省略)。 –

+2

'typeof'返回一个字符串,为什么要将它再次转换为字符串? – ajax333221

回答

2

test[1]是不是:在Firefox的调试器 “的ReferenceError测试没有定义”

THISIS我的代码。你想要的是

var test = []; 
    test[1] = "abcdef"; 
    test[2] = 123; 
    test[3] = true; 
    test[4] = {}; 
    test[5] = []; 
    test[6]; 
    test[7] = { "abcdef": 123 }; 
    test[8] = ["abcdef", 123]; 
    test[9] = function() { return "abcdef" }; 

    for (var i = 0 ; i < 10 ; i++) { 

     var probe = test[i]; 
     alert(typeof probe); 

    } 
+0

同意,这可能是OP想要的。 [这是作为一个jsFiddle](http://jsfiddle.net/T8gYC/) – Moob

+0

谢谢你们两个,正是我需要的。 –

0

test没有真正定义。 所以只需将test更改为您已经声明的某个其他变量名称即可。

 var test1 = "abcdef"; 
     var test2 = 123; 
     var test3 = true; 
     var test4 = {}; 
     var test5 = []; 
     var test7 = { "abcdef": 123 }; 
     var test8 = ["abcdef", 123]; 
1

当编写测试[I]中,你走近名为“测试”的阵列,所述I指数,这导致过程的误差在,由于测试阵列不存在。
为了正确地执行你的代码,你可以写:

var test = []; 
test[1] = "abcdef"; 
test[2] = 123; 

等。

这也没关系:

var obj ={}; 
obj.test1 = "abcdef"; 
obj.test2= 123; 

而且在循环使用:

var probe = obj["test"+i]; 

(你的循环指数应与1初始化,而不是0)