js判断对象为空已经有好几种方法了,但是个人觉得不是特别方便。
比如:
1、把对象通过 JSON.stringify 转为字符串,再判断字符串是否等于 " {} "
2、for in循环,判断key是否存在
3、jq的方法
es6已经帮我们很好的解决了此类问题。
es6针对对象增加了3个新方法(数组也有):
(1)、Object.keys:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键名
(2)、Object.values:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值
(3)、Object.entries:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对
由此,我们可以通过其中任意一个方法,得到返回的数组,判断数组长度是否大于0,来判断对象是否为空。
举个栗子:
const obj = {
foo: 'bar',
baz: 42
}
console.log(Object.keys(obj));
// ["foo", "baz"]
console.log(Object.values(obj));
// ["bar", 42]
console.log(Object.entries(obj));
// [["foo", "bar"], ["baz", 42]]
// 打印返回值的长度
console.log(Object.keys(obj).length); // 2
const obj2 = {};
console.log(Object.keys(obj2)); // []
// 打印空对象的长度
console.log(Object.keys(obj2).length); // 0
这样我们就可以很简单直观的判断出对象是否为空,并且可以通过这三个方法,拿到想要的数据(键名、键值、键值对)
那么既然得到了返回值数组,我们也可以很简单的判断对象中是否包含某个我们已知的属性名
console.log(Object.keys(obj).indexOf('baz')); // 1
console.log(Object.keys(obj).indexOf('ad')); // -1
indexOf可以判断数组是否包含某个值,返回该值所对应的下标,对于不存在的值,返回 -1
这样我们就能判断对象是否包含某个属性名了
当然了,es6还提供了其他几种判断对象是否包含属性名的方法,如下:
1、in:属性名 in 对象(判断属性名是否在对象中存在,返回一个布尔值)
console.log('baz' in obj); // true
2、hasOwnProperty:对象.hasOwnProperty(属性名)(判断对象中是否含有某个属性名,返回一个布尔值)
console.log(obj.hasOwnProperty('baz')); // true
好了,以上就是es6中判断对象是否为空,并且判断对象是否包含某个属性的方法
如有问题,请指出,接收批评。