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

2022-07-18,,,,

目录
  • 知识准备
    • object.keys
    • object.getownpropertynames
    • 可枚举属性
    • hasownproperty
  • 盘点判空方法
    • json.stringify判空
    • for in判空
    • object.getownpropertynames判空
    • object.keys()判空
    • hasownproperty判空
  • 附将对象转换为字符串进行比较
    • 总结

      知识准备

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

      object.keys

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

        var obj = {
          name: "cxy",
          age: "19"
        }; 
        var objarray = object.getownpropertynames(obj);
        console.log(objarray)

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

      object.getownpropertynames

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

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

      可枚举属性

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

      现在我们拿上面的object.getownpropertynamesobject.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))

      hasownproperty

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

        var stuobj = {
          name: "cxy"
        }
        console.log(stuobj.hasownproperty('name'))

      但是这里要注意一个问题就是,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
      }

      附将对象转换为字符串进行比较

      这种方法很不推荐,但也确实是最容易想到的,主要使用json.stringify()这个方法对对象进行强转,贴出来仅供一看: 

      var a={};
      var b=new object();
      console.log("对象字面量的比较结果:"+(json.stringify(a)=="{}"))
      console.log("构造函数的比较结果:"+(json.stringify(b)=="{}"))

      总结

      到此这篇关于js判断空对象方法的文章就介绍到这了,更多相关js判断空对象内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

      《JS判断空对象的几个方法大盘点.doc》

      下载本文的Word格式文档,以方便收藏与打印。