gpt4 book ai didi

javascript - 如何测试此 Javascript 对象是否具有任何属性?

转载 作者:行者123 更新时间:2023-12-01 16:10:47 24 4
gpt4 key购买 nike

我有一些代码可以像这样向对象添加属性:

var MyObject = new Object();

if (....) { MyObject.prop1 = .... ; }
if (....) { MyObject.prop2 = .... ; }
if (....) { MyObject.prop3 = .... ; }

完成所有这些 if 语句后,我想测试并查看 MyObject 是否具有属性。我不想测试它是否有 prop1 || Prop 2 || prop3 因为有 12 个属性可以添加。

我如何测试它是否至少有一个?我尝试了 if (MyObject) 但当然这不起作用,因为它只测试对象的存在。这些是否类似于对象的简单单行代码,如 (MyArray.length)

最佳答案

如果您在 ECMAScript5 之前的环境中工作,使用一个小循环就足够简单了:

var found = false, name;
for (name in MyObject) {
if (MyObject.hasOwnProperty(name)) {
found = true;
break;
}
}

或者因为您正在使用 var MyObject = new Object(); 来创建它(顺便说一句,您可以只使用 var MyObject = {};),您实际上不需要 hasOwnProperty 调用:

var found = false, name;
for (name in MyObject) {
found = true;
break;
}

for..in遍历对象的可枚举属性,包括它自己的和从其原型(prototype)继承的属性; hasOwnProperty告诉您属性是来自对象本身还是它的原型(prototype)。您添加的所有属性都是可枚举的,因此它们将显示在循环中。原始对象 ({}) 最初没有可枚举的属性,除非有人一直在处理 Object.prototype(这是一个非常糟糕的想法) ,因此是上面的第二个循环。

ECMAScript5(几年前发布,不被旧浏览器支持,即使在较新的浏览器中也有所不同)添加了几个函数,您可以为此使用。可能最相关的是 Object.keys ,它返回对象“自己的”属性(不是它从其原型(prototype)继承的属性)的名称数组。那意味着你不需要循环:

if (Object.keys(MyObject).length) { // Only on ES5-compliant browsers
// Yes it has at least one
}

关于javascript - 如何测试此 Javascript 对象是否具有任何属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8459645/

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