在JavaScript中,何时使用对象文字以及何时使用数组?
-
12-10-2019 - |
题
这是一个样本。我的关心似乎都在做这项工作。他们中的哪个更喜欢?
var fooArr = [{ "bar": {"blah": 9 } }];
for(var i in fooArr) {
var value = fooArr[i].bar.blah;
console.log(value); //checking in firebug console
}
var fooObj = { "bar": {"blah": 9 } };
for(var i in fooObj) {
var value = fooObj[i].blah;
console.log(value); //checking in firebug console
}
另外,以下内容似乎无效,任何避免数组符号的方式。
var fooObj1 = {
{ "bar": { "blah": 9 } },
{ "bar": { "blah": 4 } },
{ "bar": { "blah":12} }
};
因此,我不得不将上述代码修改为有效的类似。这太糟糕了,无法用物体文字过多粘吗
var fooObj1 = {
1:{ "bar": { "blah": 9 } },
2:{ "bar": { "blah": 4 } },
3:{ "bar": { "blah":12} }
};
再次感谢那些帮助我进行查询的人。
解决方案
该样本并未真正比较对象和数组。您只是通过将对象放在数组的第一个元素中来添加不必要的图层。
当您必须用名称引用某物时,请使用对象。
var obj = {}
//三种做同样事情的方式:
var obj.newName = 'bob';
var obj['newName'] = 'bob';
var name = 'newName';
var obj[name] = 'bob';
第二样式并不是真正的必要条件,实际上可能比第一个样式更慢,但是它可以帮助您了解第三次如何有用。或者您可能已经完成以下操作:
var obj = { newName:'bob' }
如果您想要一个对象中的一堆名称,它会变得有些愚蠢:
var obj = { newName:'bob', anotherNewName:'sue', yetAnotherNewName:'billy' }
obj.newName === 'bob'
obj.anotherNewName === 'sue'
//etc...
这就是阵列的目的。
var listOfNewNames = ['bob','sue','billy']
listOfNewNames[0] === 'bob'
listOfNewNames[1] === 'sue'
//etc...
当然,没有什么可以阻止您将数组分配给对象属性:
obj { listOfNewNames:['bob','sue','billy'] }
obj.listOfNewNames[0] === 'bob'
或者,如上所述,数组中的多个对象:
var listOfMonsters = [
{ monsterName:'Grarrr',eats:'people' },
{ monsterName:'Wadsworth',eats:'other monsters'}
];
listOfMonsters[1].monsterName === 'Wadsworth'
对象通常更多地是关于将相关值和方法组保持在一起以易于参考。阵列只是通常假定所有这些内容的列表,这些东西可以假定适用于或源自同一东西。
其他提示
一个 for .. in
循环在枚举上迭代。你可能想要 阅读 在上面。
如果您有各种各样的物体,我会建议一个传统的物体 for
环形:
var fooObjs = [ {bar: "blah"}, {bar: "blah2"} ];
for (var i = 0, j = fooObj.length; i < j; i++) {
console.log(fooObjs[i].bar);
}
如果您的对象具有多个属性,则可以使用 for .. in
环形:
var fooObj = { bar: "blah", baz: "blah2" };
for (var i in fooObj) {
if (fooObj.hasOwnProperty(i)) { // So you don't log prototype properties
console.log(fooObj[i]);
}
}
当您知道您有多个对象时,请使用数组。当仅使用一个对象时,不需要一个项目数组。
如您所见,语法也更为复杂(您有 [...]
和 bar
当使用数组 - >使用更多字符时),因此如果不需要,请不要使用它。
如果需要列表,请使用数组,如果需要属性,请使用对象。
在上述情况下,我更喜欢后一个。
除此之外,永远不要使用 for in
在数组上(是 极慢 并击败目的)并始终使用 hasOwnProperty
在对象的属性上迭代时。
当您需要使用多个项目时,您会使用数组。例子:
var fooArr = [{ bar: { blah: 9 } },{ bar: { blah: 4 } },{ bar: { blah: 12 } }];
for(var i in fooArr) {
var value = fooArr[i].bar.blah;
console.log(value); // will log "9", "4" and "12"
}
在第二个示例中,您只有一个对象,因此您根本不需要循环来访问属性:
var fooObj = { bar: { blah: 9 } };
var value = fooObj.bar.blah;
console.log(value);