我试图在一个javascript语句中定义一个数组(包括其他数组作为值),我可以循环验证提交时的表单。
我写的(尝试)创建内联数组的函数如下:
function arr(){
var inc;
var tempa = new Array(Math.round(arguments.length/2));
for(inc=0; inc<arguments.length; inc=inc+2) {
tempa[arguments[inc]]=arguments[inc+1];
}
return tempa;
}
这里调用三次来分配一个数组:
window.validArr = arr(
'f-county',arr('maxlen',10, 'minlen',1),
'f-postcode',arr('maxlen',8, 'minlen',6)
);
但是在javascript调试器中,变量为空,arr()
函数没有返回任何内容。有谁知道为什么我对这段代码应该做的期望不正确?
( 我已经研究了如何创建没有此函数的数组 ,但我很好奇为什么这段代码不起作用(我以为我更好地理解了javascript)比这个)。)
答案 0 :(得分:2)
从代码的功能来看,你并没有真正制作数组。在JavaScript中,使数组特殊的是管理数字索引属性。否则它们只是对象,所以它们也可以有其他属性,但是如果你不使用数组作为数组,你也可以只使用对象:
function arr(){
var inc;
var tempa = {};
for(inc=0; inc<arguments.length; inc=inc+2) {
tempa[arguments[inc]]=arguments[inc+1];
}
return tempa;
}
你从调试器中看到的是它试图向你显示你的数组的结果,因为应该显示一个真实的数组:即它的数字索引属性。如果按原样调用“arr()”函数然后查看(从您的示例中)结果的“f-county”属性,您将在那里看到一些内容。
此外,如果您做发现自己想要一个真正的数组,那么将它们初始化为特定大小绝对没有意义。只需使用[]
创建一个新数组:
var tempa = [];
答案 1 :(得分:1)
您的代码有效。只需检查您的变量,您将看到该数组上有自定义键。如果没有展开,你的调试器会以简短的语法显示(数字)固定值 - 对你来说没有。
但是,您可能需要了解数组和对象之间的区别。对象只是键值对(你可以称之为“地图”)及其原型。 Array是一种特殊类型的对象。它具有特殊的原型方法,length
功能和不同的方法:存储索引值对(即使索引仍然是键)。所以,you shouldn't use an Array as an associative array。
因此,它们的字面语法不同:
var array = ["indexed with key 0", "indexed with key 1", ...];
var object = {"custom":"keyed as 'custom'", "another":"string", ...};
// but you still can add keys to array objects:
array.custom = "keyed as 'custom'";