Javascript:获取单个属性名

Javascript:获取单个属性名,javascript,Javascript,给定这样一个对象: { name: "joe" } 我想得到“name”的值。我知道我可以使用for构造来迭代对象中的属性,但是我要处理的对象总是有一个键:值对,我不知道属性的名称。进一步说明: var a = { age: 24 }; console.log(myFunc(a)) // Displays "age" var b = { job: "cook" }; console.log(myFunc(b)) // Displays "job" 在不迭代对象的情况下,是否仍然可以执行此操

给定这样一个对象:

{ name: "joe" }
我想得到“name”的值。我知道我可以使用for构造来迭代对象中的属性,但是我要处理的对象总是有一个键:值对,我不知道属性的名称。进一步说明:

var a = { age: 24 };
console.log(myFunc(a)) // Displays "age"

var b = { job: "cook" };
console.log(myFunc(b)) // Displays "job"

在不迭代对象的情况下,是否仍然可以执行此操作?我也希望用纯Javascript来实现这一点。没有涉及框架/库。

为什么不迭代?这只是一步。我不认为你能以任何其他方式得到它。如果第一步让你感觉更好,你甚至可以在第一步之后休息。

不,迭代是获得属性名的唯一受支持的方法。所以,时间就是这样。只需将其隐藏在函数中,它就会看起来很好


但是,您是否应该使用不同类型的对象来实现您的目的,例如,
{“property”:“age”,“value”:24}
,或者甚至
[“age”,24]

,您可以迭代对象的属性并简单地返回第一个属性

function myFunc(obj) {
    for (var prop in obj) {
        return prop;
    }
}

编辑:哎呀,你想要的是属性名,而不是值这似乎是你能得到的最好的:

function myFunc(v) {
  for (var x in v) { return { prop: x, val: v[x] }; }
  return null;
};

使用
.hasOwnProperty
以确保不从对象原型返回属性是一种良好的做法:

function myFunc(obj) {
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop)) return prop;
    }
}

也许你应该用一个数组来代替
a=[“age”,24”]
,然后你用
a[0]
来获得名字,为了好玩、清晰,或者也许我只是不称职……;)我很好奇这是否值得额外的函数调用。我的测试(在Firefox中)显示了对象原型在迭代过程中总是排在最后。可能并非所有浏览器都是这样?@mellowsoon,我即将得出结论,在IE8及以下版本中,继承的属性首先被枚举!(在研究hasOwnProperty()之后,在IE8中尝试)函数多一点,我就知道它有多重要了。所以我把它改成了正确的答案。你应该在
for in
语句中使用
var prop…
,否则
prop
将变为全局(
window.prop
),或者如果它位于范围链的更高位置,它将被覆盖。@CMS谢谢,我甚至在回答中忘了这么做:)