假设我宣布

var ad = {}; 

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


当前回答

你可以使用以下方法:

两声巨响!!属性查询

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操作符的更详细的链接:确定一个对象属性是否存在

其他回答

大多数最近的浏览器(和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

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

var obj = {};
var emptyObject = _.isEmpty(obj);

你可以使用内置的Object。方法获取对象上的键列表并测试其长度。

var x = {};
// some code where value of x changes and than you want to check whether it is null or some object with values

if(Object.keys(x).length){
 // Your code here if x has some properties  
}

ES6函数

/**
 * Returns true if an object is empty.
 * @param  {*} obj the object to test
 * @return {boolean} returns true if object is empty, otherwise returns false
 */
const pureObjectIsEmpty = obj => obj && obj.constructor === Object && Object.keys(obj).length === 0

例子:


let obj = "this is an object with String constructor"
console.log(pureObjectIsEmpty(obj)) // empty? true

obj = {}
console.log(pureObjectIsEmpty(obj)) // empty? true

obj = []
console.log(pureObjectIsEmpty(obj)) // empty? true

obj = [{prop:"value"}]
console.log(pureObjectIsEmpty(obj)) // empty? true

obj = {prop:"value"}
console.log(pureObjectIsEmpty(obj)) // empty? false

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

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}()