假设我宣布
var ad = {};
如何检查该对象是否包含用户定义的属性?
假设我宣布
var ad = {};
如何检查该对象是否包含用户定义的属性?
当前回答
我不确定这是否是一个好方法,但我使用这个条件来检查对象是否有或没有任何属性。可以很容易地转化成一个函数。
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 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 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…那为什么还要继续呢?)
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
这个怎么样?
var obj = {},
var isEmpty = !obj;
var hasContent = !!obj
使用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;
};