我想知道这个目标代码是否正确用于让group1模拟一个数组?我会避免使用数组来避免错误。
var group1={}
group1[0]={}
group1[0].fruits="Apple"
group1[0].qtystock1="1"
group1[1]={}
group1[1].fruits="Durian"
group1[1].qtystock4="2"
group1[2]={}
group1[2].fruits="Orange"
group1[2].qtystock1="3"
console.log(group1[0].qtystock4) //Should give "undefined"
答案 0 :(得分:2)
这是对的,是的。是否正确要完成的事情完全取决于您将使用group1
做什么。例如,如果您想使用length
属性数组,那么您就不希望这样做,因为它不会有length
。
一般来说,如果您要使用类似数组的东西,请使用数组;如果您要将其用作非数组对象,请使用对象。但是在JavaScript中,标准数组只是具有一些特殊行为的对象(details on my anemic little blog),因此如果需要,可以使用这样的对象。
FWIW,这是其中的数组版本:
var group1 = [
{fruits: "Apple", qtystock1: "1"},
{fruits: "Durian", qtystock4: "2"},
{fruits: "Orange", qtystock1: "3"}
];
console.log(group1[0].qtystock4); //Should give "undefined"
您已经拥有的对象的更简洁版本:
var group1 = {
0: {fruits: "Apple", qtystock1: "1"},
1: {fruits: "Durian", qtystock4: "2"},
2: {fruits: "Orange", qtystock1: "3"}
};
console.log(group1[0].qtystock4); //Should give "undefined"
对于引用的数据,我可能会使用数组。我也可能会为qtystock1
/ qtystock4
使用一致的属性名称,但是当你拥有更大的上下文时,它可能是有意义的。
答案 1 :(得分:1)
这是合法的Javascript,我发现您的代码中没有错误。如果为对象分配一个这样的数字属性,则该数字将转换为字符串(Javascript中的所有属性名称都是字符串),最终将使用以下属性:
group1["0"]
由Javsacript解释为:
group1[0]
为了清晰代码,使用数组可能更有意义,因为它会自动为您保留.length
属性,您可以在其上使用数组函数,如{ {1}}和其他迭代器。您仍然可以在数组对象上拥有类似.forEach()
的属性,因为它也是一个对象。
因此,数组是对象的所有内容,并且它添加了数组功能。因此,如果您使用的是基于零的项目序列,那么通常使用数组而不是普通对象来获得清晰度和功能,并且不会丢失任何内容。
至于你的代码行:
.fruits
将显示console.log(group1[0].qtystock4)
,因为undefined
是一个没有group1[0]
属性的对象,因此如果您阅读它,JS将返回.qtystock4
。