我以为我知道如何声明
javascript数组但是在这个脚本中我得到了数组中未定义元素的无限循环.
我声明了三个数字数组,其中两个有多个值,另一个有一个值.
我有一个switch语句,它将三个数组中的一个分配给一个新的变量名cluster_array
当我通过cluster_array运行for循环时,我得到一个无限循环和每个元素,如果未定义
我错过了什么?
<script type="text/javascript">
var ga_west_cluster = new Array(10,11,12,14,74,75,76,77,78,79,80,81,82,83,85,86,87,88,89,90,91,92,295,296);
// original bad array
var ga_east_cluster = new Array(84);
// added an extra (dummy) value and it works fine
var ga_east_cluster = new Array(1,84);
var sc_cluster = new Array(93,94,95,96,97,98,99,100,101,102,103);
</script>
这是警告文字:
var test_message = "cluster data\n";
for(var k=0;k<cluster_array.length;k++)
test_message += "value: "+cluster_array[k]+"\n";
解决方法
不要像这样初始化数组.总是这样做:
var myarray = [value,value,... ];
“Array()”构造函数设计得非常糟糕.当参数是数字时,单参数形式被解释为使用那么多“空”值“初始化”数组的请求.这是一个毫无意义的事情,所以一般来说,使用数组常量表示法会更好(如上例所示).
在现代浏览器中它似乎不再发生,但我发誓有一段时间,至少有一些浏览器实际上会为单参数构造函数分配内存,这对于可能意外编写的代码并不是很有用但是很危险传递一个非常大的数字.