当前位置:网站首页>盘点JS判断空对象的几大方法

盘点JS判断空对象的几大方法

2022-07-07 10:07:00 InfoQ


知识准备

在盘点JS判空方法之前我们先来了解下面的三个方法。

Object.keys

Object.keys()
方法是以对象为参数,返回一个包含该对象内所匹配的属性和方法的数组

 var obj = {
 name: "cxy",
 age: "19"
 }; 
 var objArray = Object.getOwnPropertyNames(obj);
 console.log(objArray)

null
可以看到
objArray
为返回值,且返回值为以对象内的属性为内容的数组

Object.getOwnPropertyNames

Object.getOwnPropertyNames()
方法同样是也是以对象为参数,返回一个包含该对象内所匹配的属性和方法的数组

大家在这里会发出疑问,这两个有啥区别?
Object.getOwnPropertyNames()
可以返回所有的属性,而
Object.keys()
只能返回可枚举属性,诶?到这里大家又疑惑了
可枚举属性
又是个啥?不要着急,我来解释一下什么叫可枚举属性

可枚举属性

可枚举或者不可枚举属性是对象内部通过可枚举标志
enumerable
来进行区分的,在默认情况下,我们
obj.name = "cxy"
为对象新增了一个属性后,其可枚举标志
enumerable
ture
,而当其值为
false
的时候它是不可枚举的,当我们对对象进行
for
,
Object.keys()
,
JSON.stringify()
的时候不可枚举属性是找不出来的,我们可以理解为不可枚举属性是
隐身

现在我们拿上面的
Object.getOwnPropertyNames
Object.keys()
进行实战举例,我们通过
defineProperty
来为对象添加
age
属性,因为该方法可以设置枚举标志,这里设置为
false
,可以看到下面两个不同的返回结果

var stuObj = {
 name: "cxy"
}
Object.defineProperty(stuObj, 'age', {
 value: "18",
 enumerable: false
});
console.log(Object.keys(stuObj))
console.log(Object.getOwnPropertyNames(stuObj))

null

hasOwnProperty

hasOwnProperty()
是用来判断某对象是否含有某属性的,其参数为属性名

 var stuObj = {
 name: "cxy"
 }
 console.log(stuObj.hasOwnProperty('name'))

null
但是这里要注意一个问题就是,
hasOwnProperty()
判断
继承属性
的时候会返回
false
,继承属性即对象从原型对象上继承的属性,比如说
toString

盘点判空方法

JSON.stringify

判空

这种方式是比较简单的了,使用
JSON.stringify
将对象转换为字符串,再通过等于判断即可得到对象是否为空的布尔值

let obj = {
 name: "cxy"
}
console.log(JSON.stringify(obj) == '{}')

for in

判空

使用
for in
的话可以当触发循环的时候返回
false
没有触发循环的时候代表对象为空返回
ture

let forNull = (items) => {
 for (let item in items) {
 return false
 }
 return true
}

Object.getOwnPropertyNames

判空

这里使用了上文提及的
Object.getOwnPropertyNames
,将返回的数组的
length
作为判断依据。

let stuArray = Object.getOwnPropertyNames(obj)
console.log(stuArray.length === 0)

Object.keys()

判空

和上个方法一样,使用数组作为判断依据

let stuArray = Object.getOwnPropertyNames(obj)
console.log(stuArray.length === 0)

hasOwnProperty

判空

使用
hasOwnProperty
是使用for循环将元素进行判断如果含有则返回
false
说明不为空,反之则为空

let forNull = (items) => {
 for (let item in items) {
 if(items.hasOwnProperty(item)){
 return false
 }
 }
 return true
}

原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/8e1f5c127ac76d69defc24b50