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

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

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

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

当前回答

如果有人喜欢数组销毁

const [firstKey] = Object.keys(object);

其他回答

没有“第一”属性。对象键是无序的。

如果您使用for(var foo in bar)对它们进行循环,您将以某种顺序获取它们,但将来可能会发生变化(尤其是添加或删除其他键时)。

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

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

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

优雅地遍历键值的基本语法

const object1 = {
  a: 'somestring',
  b: 42
};

for (const [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}

// expected output:
// "a: somestring"
// "b: 42"

我不建议您使用Object.keys,因为旧IE版本不支持它。但如果你真的需要,你可以使用上面的代码来保证向后兼容性:

if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
    hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
    dontEnums = [
      'toString',
      'toLocaleString',
      'valueOf',
      'hasOwnProperty',
      'isPrototypeOf',
      'propertyIsEnumerable',
      'constructor'
    ],
    dontEnumsLength = dontEnums.length;

return function (obj) {
  if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');

  var result = [];

  for (var prop in obj) {
    if (hasOwnProperty.call(obj, prop)) result.push(prop);
  }

  if (hasDontEnumBug) {
    for (var i=0; i < dontEnumsLength; i++) {
      if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
    }
  }
  return result;
}})()};

功能Firefox(壁虎)4(2.0)Chrome 5 Internet Explorer 9 Opera 12 Safari 5

更多信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys

但如果您只需要第一个,我们可以安排一个更短的解决方案,如:

var data = {"key1":"123","key2":"456"};
var first = {};
for(key in data){
    if(data.hasOwnProperty(key)){
        first.key = key;
        first.content =  data[key];
        break;
    }
}
console.log(first); // {key:"key",content:"123"}

有什么理由不这样做吗?

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

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