- 使用JSON.stringify将对象转换成字符串
-
返回字符串
-
转换过程中会将函数去掉
function count(x,y){
return x+y;
}
const infor={
a:"b",
add:1,
arr,
count
};
const inforOne={};
//使用扩展字符串
console.log(JSON.stringify(infor)=="{}");//false
console.log(JSON.stringify(inforOne)=="{}"); //true
将对象通过JSON.stringify转换成字符串不会转换函数,例如infor对象中的count。被转换成字符串后就可以进行字符串判断。
- 使用Object.keys() 返回一个数组
-
返回数组
-
返回的数组中包括对象自身的所有可以枚举属性的键名
-
不含Symbol属性的键名,不返回继承的属性的键名
//使用Object.keys() 返回一个数组,
//包括对象自身的所有可以枚举属性(不含Symbol属性,不返回继承)的键名
console.log(Object.keys(infor));// ["a", "add", "arr", "count"]
console.log(Object.keys(inforOne));//[]
console.log(Object.keys(infor).length==0);//false
console.log(Object.keys(inforOne).length==0);//true
- 使用Object.getOwnPropertyNames()返回一个数组
-
返回数组
-
返回的数组中包括对象自身的所有属性的键名
-
不返回Symbol属性的键名,不返回继承的属性的键名
-
有兼容性,不兼容ie8
//使用Object.getOwnPropertyNames()回一个数组,
//包括对象自身的所有属性(不含Symbol属性,包括不可枚举属性)的键名 不返回继承的键名
//此方法不兼容ie8
console.log(Object.getOwnPropertyNames(infor));// ["a", "add", "arr", "count"]
console.log(Object.getOwnPropertyNames(inforOne)); //[]
- 使用for…in循环
// for in循环
function test(infor){
for(let key in infor){
return false;
}
return true;
}
console.log(test(infor));//false
console.log(test(inforOne));//true
- 使用Reflect.ownKeys(obj)
-
返回数组
-
包含对象自身的所有键名
-
不包含继承的属性的键名
//Reflect.ownKeys(obj) 返回一个数组,
//包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
console.log(Reflect.ownKeys(infor));//["a", "add", "arr", "count"]
console.log(Reflect.ownKeys(inforOne));//[]