空对象的隐式转换
空对象在进行隐式转换时为true;
既然空对象在进行隐式转换时时true,那么肯定是空对象与空对象不相等的。
let obj = {}
if(obj){
console.log(1)
}
else {
console.log(2)
}
//控制台打印1
let obj1 = {}
let obj2 = {}
console.log(obj1==obj2) //false
空函数的隐式转换
同理,函数也是一种对象,空函数同理于空对象:
let obj = function () {}
if(obj){
console.log(1)
}
else {
console.log(2)
}
//控制台打印1
let obj1 = function () {}
let obj2 = function () {}
console.log( obj1 == obj2 ) //false
判断是不是空对象
所以判断一个对象是不是空对象,不能“自以为是”地认为隐式转换中空对象是false。
下面介绍几种判断是否为空对象的方法。
方法1:for…in遍历
let emptyObj = {}
let fullObj = {
name: "Alice",
age: 25,
sex: "female"
}
let fn = (obj)=>{
let isEmpty = true
for(let i in obj){
if(i){ //如果存在属性key
isEmpty = false
return isEmpty
}
}
return isEmpty
}
console.log(fn(emptyObj)) //true
console.log(fn(fullObj)) //false
方法2:JSON.stringfy
let emptyObj = {}
let fullObj = {
name: "Alice",
age: 25,
sex: "female"
}
console.log(JSON.stringify(emptyObj)==="{}") //true
console.log(JSON.stringify(fullObj)==="{}") //false
方法3:Object.keys(obj).length
let emptyObj = {}
let fullObj = {
name: "Alice",
age: 25,
sex: "female"
}
console.log(Object.keys(emptyObj).length) //0
console.log(Object.keys(fullObj).length) //3