您的位置:首页 > 其它

判断一个对象是否为空

2017-04-20 17:46 148 查看
由判断一个对象是否有属性(即{}),引发的一系列思考:

1. 首先要想判断一个对象是否为null,很简单,使用
if(obj)
或者
obj==null
直接判断即可。

2. 判断一个对象是否有任何属性:

方法一:使用
for in
判断,是否含有属性。(好方法)

JavaScript判断object/json 是否为空,可以使用jQuery的isEmptyObject()方法。

function isEmptyObject(e) {
var t;
for (t in e)
return !1;
return !0;
}
console.log($.isEmptyObject({"re": 2}));    //false
console.log(isEmptyObject());           //true
console.log(isEmptyObject({}));         //true
console.log(isEmptyObject(null));       //true
console.log(isEmptyObject(23));         //true
console.log(isEmptyObject({"te": 2}));      //false


和喵大婶探讨,得到方法二:
对象使用JSON.stringify转为字符串,判断长度是否大于2


var obj = {
'name': 'xiaowei',
'heihei': '12',
'haha': 'girl'
};
var myobj = {};
var nullobj = null;

//自创方法
function isEmptyProperty(obj) {
if (typeof obj === 'object' && obj) {
if (JSON.stringify(obj).length > 2) {
return !1;
}
}
return !0;
}
console.log(isEmptyProperty(23)); //true
console.log(isEmptyProperty(obj)); //false
console.log(isEmptyProperty(myobj)); //true
console.log(isEmptyProperty(nullobj)); //true


数组的toString方法是把数组转为字符串形式,对象的toString方法是转为类型,因为Object.prototype.toString.call(obj).slice(8,-1); 是输出类型。

那把伪数组转为数组,再判断length,是不是可以呢。他是有条件的:

伪数组转为真正数组的条件:

1.伪数组的键值需要为数字(对应数组的下标),否则转换后数组均无初始值

2.有length属性

例:

不含有length:

var obj = {
0:"abc",
1:"def",
2:"hig"
}
var arr = [].slice.call(obj);
console.log(arr); //[]


属性值不为数字,肯定不能转为数组,无法对应下标,结果也为[].

正确使用:

var obj = {
0:"abc",
1:"def",
2:"hig",
length:3
}

var arr = [].slice.call(obj);
console.log(arr);
//输出结果:
(3) ["abc", "def", "hig"]
0:"abc"
1:"def"
2:"hig"
length:3
__proto__:Array(0)


注意:要是属性数字大小和length不匹配,以length为准,没有定义的下标对应的数组值为undefined。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: