问题:在for in look退出后,如何保留密钥名称。如果我将键字符串分配给"for in"范围之外的变量,它就会变成一个数字。有什么方法可以防止这种情况并维护密钥名称吗?感谢
示例:
var lastItem = undefined;
function getKeyNames(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
lastItem = i;
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
alert (lastItem);
objects.push(obj);
}
}
return objects;
}
alert (lastItem);
函数内部的alert(和for in内部(输出键的实际字符串名称,但当我在函数外部发出警报时,我会得到一个数字。如何保留密钥的字符串名称?为了清楚起见,我说的不是对象的值,而是键的实际名称。
工作良好:
var foo = { foo : 22, bar : 42 };
for(var i in foo);
alert(i); // "bar"
你到底在传递什么给函数?
您的示例看起来不错。调用getKeyNames
后,lastValue
将保留在对象中找到的最后一个键。
但是,您的示例不调用getKeyNames
,因此alert(lastValue)
应该提醒"未定义"。
如果你在某个地方调用它,并且你发现lastValue
包含一个数字,那么这可能是因为你的对象包含了一个数字。例如,for (var i in ['a','b','c'])
将迭代"length"、"0"、"1"、"2"。