gpt4 book ai didi

javascript - 在 Javascript 中查找对象键

转载 作者:数据小太阳 更新时间:2023-10-29 05:13:41 26 4
gpt4 key购买 nike

我正在开发一个 ExtJS 网络应用程序,并且一直在寻找一种方法来列出所有对象自己的属性名称。谷歌搜索,我很快在 this blog 上找到了一些引用代码。 .现在,当使用这个 keys() 方法时,我在枚举对象的对象的属性名称时发现了一些奇怪的行为。示例代码:

keys = function(obj) {
if (typeof obj != "object" && typeof obj != "function" || obj == null) {
throw TypeError("Object.keys called on non-object");
}
var keys = [];
for (var p in obj)
obj.hasOwnProperty(p) && keys.push(p);
return keys;
};

var test = {}
test["nr1"] = {testid: 1, teststr: "one"};
test["nr2"] = {testid: 2, teststr: "two"};
test["nr3"] = {testid: 3, teststr: "three"};
for (var i in keys(test)) {
console.log(i);
}

运行这段代码时,控制台输出:

0
1
2
remove()

因此,在预期的 3 个属性名称之上,它还列出了一个“remove()”函数。这显然与 ExtJS 相关,因为枚举在空白的非 ExtJS 加载页面上按预期工作。

谁能解释一下 ExtJS 到底在做什么?有没有更好的方法来枚举对象拥有的属性名称?

非常感谢,华德

最佳答案

尝试检查hasOwnProperty仅列出数组本身的属性,而不是其原型(prototype)。

for (var i in keys(test)) {
if(keys(test).hasOwnProperty(i)){
console.log(i);
}
}

关于javascript - 在 Javascript 中查找对象键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com