2015-07-13 55 views
0

即时通讯JavaScript练习。'变量'变量不能在javascript中工作

和即时尝试使用数组元素作为数组名称在Javascript中。

我searchd的计算器,发现像this

一些链接时,即时通讯测试这一点,我发现它不工作,它给undefind当IM调用第二功能。请参阅jsbin link ,也许我错了,请帮助我。 这里是我的代码,并链接:https://jsbin.com/yazowutera/

<button onclick="testArrays1(a, [vic.zero, vic.one])">source</button> 
<br> 
<button onclick="testArrays2(a, vic[all[1]])">desti</button> 

和JavaScript

<script> 

var vic = { 

    zero : ["00","01","02"], 

    one : ["10","11","12"], 

    two : ["20","21","22"] 

}; 
var all = ["zero","one","two"]; 

var a = "a"; 


function testArrays1(needle, arrays){ 
    for (var i=0; i<arrays.length; i++) { 
     alert(needle +arrays[i]); 
    } 
} 

function testArrays2(needle, arrays) { 
    //for (var i=0; i<arrays.length; i++) { 
    alert(needle +arrays); 
    //} 
} 

</script> 

我不是在J-查询现在请ANS在JavaScript

+0

谁我应该标记正确的答案,因为一切都是正确的答案 – victor

回答

1

看来all是一个特殊变量保留为HTMLAllCollection和它的第二个元素(即all[1])是一个HTMLHeadElement。这似乎只适用于使用内联脚本(元素属性中的脚本)。如果使用正常的脚本块,似乎必须执行document.all(但这可能是JSFiddle测试的副作用)。

推荐的解决方案是使用不同的变量名称。例如,变量更改为test

<button onclick="testArrays2(a, vic[test[1]])">desti</button> 

var test = ["zero","one","two"]; 
+0

我在哪里可以找到所有这些保留的东西名单,因为我浪费2个小时寻找这个便宜的解决方案 – victor

+0

我不关心你自己的清单。只要学习如何更好地调试你的问题。一个简单的'console.log(all)'会告诉你'all'有问题,然后快速搜索就可以得到答案。尽量避免使用内联脚本,创建一个'脚本'块并注册你的按钮点击 - 虽然你会想要在文档准备好(或等效) – musefan

+0

thnx的小费,你有自己的网站或博客或东西在线,你在哪里发布有关编程。 – victor

1

“所有”(或“的document.all”)是保留变量,它返回一个HTMLAllCollection。将你的变量名称改为你的javascript中的其他名称,它将起作用。

0

正如他人提到所有是一个保留关键字。但是如果你仍然想使用它,你可以使用如下。哪个有效!

切记:在JavaScript编码中始终使用保留关键字作为变量是一种不好的做法。所以不要使用那些保留字。

你的JavaScript:

window.all = ["zero","one","two"]; 

你的HTML:

<button onclick="testArrays2(a, window.all[1])">desti</button> 
+0

我在哪里可以找到所有保留的关键字列表供将来使用 – victor

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript – Nirus