假设我宣布

var ad = {}; 

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


当前回答

你可以使用内置的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  
}

其他回答

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

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

使用jQuery,你可以使用:

$.isEmptyObject(obj); // Returns: Boolean

从jQuery 1.4开始,这个方法既检查对象本身的属性,也检查从原型继承的属性(因为它不使用hasOwnProperty)。

随着ECMAScript第五版在现代浏览器(IE9+, FF4+, Chrome5+, Opera12+, Safari5+),你可以使用内置的对象。键的方法:

var obj = { blah: 1 };
var isEmpty = !Object.keys(obj).length;

或者简单的JavaScript:

var isEmpty = function(obj) {
               for(var p in obj){
                  return false;
               }
               return true;
            };

你可以使用内置的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  
}
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…那为什么还要继续呢?)

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