假设我宣布
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 obj = {},
var isEmpty = !obj;
var hasContent = !!obj
你可以循环遍历对象的属性,如下所示:
for(var prop in ad) {
if (ad.hasOwnProperty(prop)) {
// handle prop as required
}
}
使用hasOwnProperty()方法来确定对象是否将指定的属性作为直接属性,而不是从对象的原型链继承,这很重要。
Edit
来自注释:您可以将该代码放入函数中,并使其在到达有注释的部分时立即返回false
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
如果你使用的是underscore.js,那么你可以使用_。isEmpty功能:
var obj = {};
var emptyObject = _.isEmpty(obj);