假设我宣布
var ad = {};
如何检查该对象是否包含用户定义的属性?
假设我宣布
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