假设我宣布

var ad = {}; 

如何检查该对象是否包含用户定义的属性?


当前回答

当确定对象是用户定义的对象时,确定UDO是否为空的最简单的方法是以下代码:

isEmpty=
/*b.b Troy III p.a.e*/
function(x,p){for(p in x)return!1;return!0};

尽管这种方法(本质上)是一种演绎方法,-它是最快的,而且可能是最快的。

a={};
isEmpty(a) >> true

a.b=1
isEmpty(a) >> false 

注: 不要在浏览器定义的对象上使用它。

其他回答

对象。hasOwn是一个新的静态方法(还不是所有浏览器都完全支持),它检查指定的对象是否有指定的属性作为自己的属性,如果是这样就返回true。如果该属性被继承或在该对象上不存在,则返回false。

您可以遍历对象属性并检查它们是否确实是自己的属性

for (let property in ad) {
   if (Object.hasOwn(ad, property)) {
    // handle your code for object own properties here
  }
}   

更多关于Object的信息。hasOwn - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/

浏览器兼容性在这里- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn#browser_compatibility

for(var memberName in ad)
{
  //Member Name: memberName
  //Member Value: ad[memberName]
}

成员是指成员属性,成员变量,你可以叫它>_>

上面的代码将返回EVERYTHING,包括toString… 如果你只想查看对象的原型是否被扩展:

var dummyObj = {};  
for(var memberName in ad)
{
  if(typeof(dummyObj[memberName]) == typeof(ad[memberName])) continue; //note A
  //Member Name: memberName
  //Member Value: ad[memberName]

}

注A:我们检查虚拟对象的成员是否与测试对象的成员具有相同的类型。如果它是一个扩展,dummyobject的成员类型应该是"undefined"

大多数最近的浏览器(和node.js)都支持object .keys(),它会返回一个数组,其中包含对象文字中的所有键,因此您可以执行以下操作:

var ad = {}; 
Object.keys(ad).length;//this will be 0 in this case

浏览器支持:Firefox 4, Chrome 5, Internet Explorer 9, Opera 12, Safari 5

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

我不确定这是否是一个好方法,但我使用这个条件来检查对象是否有或没有任何属性。可以很容易地转化成一个函数。

const obj = {};
    
if(function(){for (key in obj){return true}return false}())
{
  //do something;
}
else
{
  //do something else;
}
    
//Condition could be shorted by e.g. function(){for(key in obj){return 1}return 0}()
for (var hasProperties in ad) break;
if (hasProperties)
    ... // ad has properties

如果你必须确保安全并检查对象原型(这些是由某些库添加的,默认情况下没有):

var hasProperties = false;
for (var x in ad) {
    if (ad.hasOwnProperty(x)) {
        hasProperties = true;
        break;
    }
}
if (hasProperties)
    ... // ad has properties