假设我宣布

var ad = {}; 

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


当前回答

var hasAnyProps = false; for (var key in obj) { hasAnyProps = true; break; }
// as of this line hasAnyProps will show Boolean whether or not any iterable props exist

简单,适用于每个浏览器,即使它在技术上是对对象上的所有键的循环,它也不会循环遍历所有键…要么有0,循环不运行,要么有一些,循环在第一个之后中断(因为我们只检查是否有ANY…那为什么还要继续呢?)

其他回答

当确定对象是用户定义的对象时,确定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 

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

var hasAnyProps = false; for (var key in obj) { hasAnyProps = true; break; }
// as of this line hasAnyProps will show Boolean whether or not any iterable props exist

简单,适用于每个浏览器,即使它在技术上是对对象上的所有键的循环,它也不会循环遍历所有键…要么有0,循环不运行,要么有一些,循环在第一个之后中断(因为我们只检查是否有ANY…那为什么还要继续呢?)

如果你使用的是underscore.js,那么你可以使用_。isEmpty功能:

var obj = {};
var emptyObject = _.isEmpty(obj);
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"

你可以使用以下方法:

两声巨响!!属性查询

var a = !![]; // true
var a = !!null; // false

hasOwnProperty 这是我曾经用过的东西:

var myObject = {
  name: 'John',
  address: null
};
if (myObject.hasOwnProperty('address')) { // true
  // do something if it exists.
}

然而,JavaScript决定不保护方法的名称,因此它可能被篡改。

var myObject = {
  hasOwnProperty: 'I will populate it myself!'
};

myObject中的道具

var myObject = {
  name: 'John',
  address: null,
  developer: false
};
'developer' in myObject; // true, remember it's looking for exists, not value.

typeof

if (typeof myObject.name !== 'undefined') {
  // do something
}

但是,它不检查null。

我认为这是最好的办法。

在运营商

var myObject = {
  name: 'John',
  address: null
};

if('name' in myObject) {
  console.log("Name exists in myObject");
}else{
  console.log("Name does not exist in myObject");
}

结果:

Name存在于myObject中

下面是一个关于in操作符的更详细的链接:确定一个对象属性是否存在