我有一个JavaScript对象,被视为关联数组。我们称它为 "fields"。它有多个元素,例如:
fields['element1'] = ...
fields['element2'] = ...
fields['element3'] = ...
已知fields[0],是否可以获取属性的名称(即 "element1")而不是其值?
我有一个JavaScript对象,被视为关联数组。我们称它为 "fields"。它有多个元素,例如:
fields['element1'] = ...
fields['element2'] = ...
fields['element3'] = ...
已知fields[0],是否可以获取属性的名称(即 "element1")而不是其值?
假设你有一个对象oObject,它可能是:
var oObject = {} ;
oObject["aaa"] = "AAA" ;
oObject["bbb"] = "BBB" ;
oObject["ccc"] = "CCC" ;
oObject["ddd"] = "DDD" ;
oObject["eee"] = "EEE" ;
现在,假设你想要知道它的属性名称和值,并将其放入变量strName和strValue中。 为此,您可以使用“for(x in o)”结构,就像以下示例中所示:
var strName, strValue ;
for(strName in oObject)
{
strValue = oObject[strName] ;
alert("name : " + strName + " : value : " + strValue) ;
}
"for(x in o)"语句会遍历对象"o"的所有属性,在每次迭代时,将当前属性名存储在变量"x"中。所以,要获取其值,只需写o[x]即可,但您已经知道这一点。
不可以,有两个原因。
您可以循环遍历属性:
function (obj) {
for (prop in obj) {
if (obj.hasOwnProperty(prop) {
return prop;
}
}
};
要获取任意时间都可能更改的“first”属性的值。
http://ajaxian.com/archives/fun-with-browsers-for-in-loop 解释了 hasOwnProperty 模式。
hasOwnProperty
的作用。OP可能想要包括在原型中定义的字段的第一个字段(但最有可能他想要你的方法)。 - Blixt除非fields
是支持数字索引的Array
对象,否则没有fields[0]
,因此您不能像那样获取它的名称。但是您可以通过以下方式模拟它:
function getKey(obj, i) {
var j = 0;
for (var p in obj) {
if (j++ == i) return p;
}
return null;
}
for (var p in obj)
会循环遍历对象 obj
中的每个字段名。通过获取第 n 个字段名,您可以有效地获取某个索引的“键”。
请注意,虽然它正在努力成为标准,但目前不保证字段名称的顺序符合标准,这意味着在修改对象后,同一函数调用理论上可能返回不同的字段名称。同样的情况也适用于不同的浏览器可能返回不同的结果。实际上,您会发现几乎所有的浏览器都会保留字段名称的顺序,因此您不必担心它。
Object
实例,例如,var aa = {};
aa.foo = 'argle';
alert(aa['foo']); // Will alert 'argle'
请不要使用Array
代替Object
——这可能会对for key in aa
风格的迭代造成严重影响。
something = []
或something = new Array()
,然后跟着something['key'] = 123
。例如WMD(在SO上使用的实时Markdown编辑器)和jQuery UI。 - Blixt