js/es6判断对象是否为空,并判断对象是否包含某个属性
js/es6判断对象是否为空,并判断对象是否包含某个属性
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(keys.indexOf('baz')); // 1
-
-
console.log(keys.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中判断对象是否为空,并且判断对象是否包含某个属性的方法