是否有一种优雅的方法来访问对象的第一个属性。。。

你不知道你的财产的名字而不使用像..这样的循环。。in或jQuery的$.each

例如,我需要在不知道foo1名称的情况下访问foo1对象:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

当前回答

正如其他人指出的那样,如果财产的顺序很重要,那么将它们存储在对象中并不是一个好主意。相反,您应该通过方括号使用数组。例如。,

var example = [ {/* stuff1 */}, { /* stuff2 */}, { /* stuff3 */}];
var first = example[0];

请注意,您会丢失“foo”标识符。但您可以向包含的对象添加名称属性:

var example = [ 
  {name: 'foo1', /* stuff1 */},
  {name: 'foo2', /* stuff2 */},
  {name: 'foo3', /* stuff3 */}
];
var whatWasFirst = example[0].name;

对于那些寻求类似问题答案的人,即:“我如何找到一个或多个匹配特定模式的财产?”,我建议使用Object.keys()。要扩展benekastah的答案:

for (const propName of Object.keys(example)) {
  if (propName.startsWith('foo')) {
    console.log(`Found propName ${propName} with value ${example[propName]}`);
    break;
  }
}

其他回答

否。MDN定义的对象文本是:

一个对象的零对或多对属性名和相关值的列表,用大括号({})括起来。

因此,对象文字不是数组,您只能使用其显式名称或使用in关键字的for循环访问财产。

使用Object.keys获取对象的财产数组。例子:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)

此处提供了文档和跨浏览器垫片。它的使用示例可以在我的另一个答案中找到。

编辑:为了清楚起见,我只想重复其他答案中正确的表述:JavaScript对象中的键顺序未定义。

var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'

Object.values(obj)[0]; // returns 'someVal'

使用它,您还可以通过索引访问其他财产。请注意!Object.keys或Object.values的返回顺序并不能根据ECMAScript得到保证,但所有主要浏览器实现都是非官方的,请阅读https://stackoverflow.com/a/23202095有关详细信息。

尝试for…in循环,并在第一次迭代后中断:

for (var prop in object) {
    // object[prop]
    break;
}

有什么理由不这样做吗?

> example.map(x => x.name);

(3) ["foo1", "foo2", "foo3"]