如何保留""范围之外的对象关键字名称;在";?Javascript

How do I retain an objects key name outside of scope of "for in"? Javascript

本文关键字:quot 关键字 对象 Javascript 范围 何保留 保留      更新时间:2023-09-26

问题:在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"。