由判断一个对象是否有属性(即{}),引发的一系列思考:
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。