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,来判断对象是否为空。

举个栗子:

  1.  
    const obj = {
  2.  
    foo: 'bar',
  3.  
    baz: 42
  4.  
    }
  5.  
    console.log(Object.keys(obj));
  6.  
    // ["foo", "baz"]
  7.  
     
  8.  
    console.log(Object.values(obj));
  9.  
    // ["bar", 42]
  10.  
     
  11.  
    console.log(Object.entries(obj));
  12.  
    // [["foo", "bar"], ["baz", 42]]
  13.  
     
  14.  
    // 打印返回值的长度
  15.  
    console.log(Object.keys(obj).length); // 2
  16.  
     
  17.  
    const obj2 = {};
  18.  
    console.log(Object.keys(obj2)); // []
  19.  
    // 打印空对象的长度
  20.  
    console.log(Object.keys(obj2).length); // 0

这样我们就可以很简单直观的判断出对象是否为空,并且可以通过这三个方法,拿到想要的数据(键名、键值、键值对)

那么既然得到了返回值数组,我们也可以很简单的判断对象中是否包含某个我们已知的属性名

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

posted on 2020-09-08 16:38  刘应杰  阅读(6773)  评论(0编辑  收藏  举报

导航