之间是否存在差异:
var samples = {
"TB10152254-001": {
folderno: "TB10152254",
ordno: "001",
startfootage: "",
endfootage: "",
tagout: "Y"
},
"TB10152254-002": {
folderno: "TB10152254",
ordno: "002",
startfootage: "",
endfootage: "",
tagout: "Y"
},
"TB10152254-003": {
folderno: "TB10152254",
ordno: "003",
startfootage: "",
endfootage: "",
tagout: "Y"
}
};
和
var samples = new Array();
samples["TB10152254-001"] = {
folderno: "TB10152254",
ordno: "001",
startfootage: "",
endfootage: "",
tagout: "Y"};
samples["TB10152254-002"] = {
folderno: "TB10152254",
ordno: "002",
startfootage: "",
endfootage: "",
tagout: "Y"
};
samples["TB10152254-003"] = {
folderno: "TB10152254",
ordno: "003",
startfootage: "",
endfootage: "",
tagout: "Y"
};
编辑:
我会重新说出这个问题: 如何动态填充哈希? 我不能做像样品这样的东西.TB10152254-003因为我TB10152254-003是动态的...所以,这甚至可能吗?
答案 0 :(得分:2)
两者都可以工作,因为Array是一种对象。但是以这种方式使用数组没有任何优势,当您使用for/in
迭代属性时很容易出错。
Object将是用于命名属性的正确类型。仅为索引属性保留使用Array。
关于编辑,您可以使用方括号表示法以与数组相同的方式动态填充对象。
// Create a new empty object. You an use "new Object()" if you wish
var samples = {};
// Populate the "samples" object in the same way you would an Array.
samples["TB10152254-001"] = {
folderno: "TB10152254",
ordno: "001",
startfootage: "",
endfootage: "",
tagout: "Y"};
samples["TB10152254-002"] = {
folderno: "TB10152254",
ordno: "002",
startfootage: "",
endfootage: "",
tagout: "Y"
};
samples["TB10152254-003"] = {
folderno: "TB10152254",
ordno: "003",
startfootage: "",
endfootage: "",
tagout: "Y"
};
答案 1 :(得分:1)
是。在第二个示例示例中,您“滥用”了Array
和Object
这一事实。不要这样做。
仅将Array
用于数字索引值,并使用普通Objects
用于有类型哈希表。
在JavaScript中,基本上所有东西都是对象。还有数组。但是Array
对象提供了处理数字索引数据的其他方法。
在第二个示例中执行samples.length
时,您可能会发现最佳差异。普通对象没有属性length
,数组没有。对于数组,它会告诉您存储在数组中的元素数量。现在,当您在第二个示例中调用samples.length
时,您将获得0
,因为该数组实际上不包含任何元素。
更令人困惑的是,您有两种访问对象属性的可能性:“点符号”,object.property
和“数组符号”,object['property']
。但这是不是数组的对象的功能。
当您生成密钥或将属性名称存储在变量中时,数组表示法会派上用场。
<强>更新强>
如上所述,您可以使用数组表示法动态创建属性,例如:
var samples = {};
for(var i = 0; i < 4; i++) {
samples["TB10152254-" + i] = {
folderno: "TB10152254",
ordno: i,
startfootage: "",
endfootage: "",
tagout: "Y"
}
}
如果要访问属性,则必须使用for...in
循环来迭代键:
for(var key in samples) {
var value = samples[key];
}
但请注意:永远不要使用for...in
来循环数组。在我链接的页面上也写了原因。