1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      如何检查一个对象是否为空

       更新时间£º2019年04月11日 14:36:00   作者£ºJS菌   我要评论

      这篇文章主要介绍了js如何检查一个对象是否为空£¬文中通过示例代码介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友们下面随?#21028;?#32534;来一起学习学习吧

      检查一个数组为空很容易£¬直接调用 length 方法即可£¬那么如何检查一个对象是否为空呢 ❓

      这里的空指的是对象没有自有属性

      假设这里有两个对象£¬一个是 obj 一个是 anotherObj

      let obj1 = {
        name: 'oli',
        child: {
          name: 'oliver'
        }
      }
      
      let obj2 = {
        [Symbol('name')]: 'alice'
      }
      
      let obj3 = Object.defineProperty({}, 'name', {
        value: 'alice',
        enumerable: false
      })
      
      let obj4 = Object.create(null)
      
      // 我们需要一个函数£¬判断是否不含自有属性
      
      isEmpty(obj1) // false
      isEmpty(obj2) // false
      isEmpty(obj3) // false
      isEmpty(obj4) // true
      
      

      想了半天查看对象是否有 Symbol 属性只能使用 getOwnPropertySymbols 方法£¬如果还有更好的方法欢迎留言

      方法一£º遍历

      for-in 遍历£¬并通过 hasOwnProperty 方法确认是否存在某个 key 这种方法不能够遍历到 enumerable 为 false 的属性

      const isEmptyObj = object => {
        if (!!Object.getOwnPropertySymbols(object).length) {
          return false
        }
        for (const key in object) {
          if (object.hasOwnProperty(key)) {
            return false
          }
        }
        return true
      }
      
      

      方法二£ºkeys 方法

      使用 Object 静态方法 keys 然后判断 length 即可£¬keys 返回的是自身可枚举属性£¬因此同样的不可遍历到 enumerable 为 false 的属性

      const isEmptyObj = object => {
        if (!!Object.getOwnPropertySymbols(object).length) {
          return false
        }
        if (Object.keys(object).length) {
          return false
        }
        return true
      }
      
      

      方法三£ºJSON 方法

      使用 JSON Stringify 方法将对象转为字符串£¬与字符串 '{}' 对比£¬同样该方法无法获取到不可遍历属性

      const isEmptyObj = object => {
        if (!!Object.getOwnPropertySymbols(object).length) {
          return false
        }
        return JSON.stringify(object) === '{}'
      }
      
      ¡£

      方法四£ºgetOwnPropertyNames 方法

      使用 Object 的 getOwnPropertyNames 方法£¬获取所有属性名£¬这样就算是不可枚举属性依然能够获取到£¬算是比较 ok 的方法¡£

      const isEmptyObj = object => {
        if (!!Object.getOwnPropertySymbols(object).length) {
          return false
        }
        if (!!Object.getOwnPropertyNames(object).length) {
          return false
        }
        return true
      }
      
      

      简化版£º

      const isEmptyObj = object => !Object.getOwnPropertySymbols(object).length && !Object.getOwnPropertyNames(object).length

      以上所述是小编给大家介绍的js如何检查一个对象是否为空详解整合£¬希望对大家有所帮助£¬如果大家有任何疑?#26159;?#32473;我留言£¬小编会及时回复大家的¡£在此也非常感谢大家对脚本之家网站的支持£¡

      相关文章

    4. js判断手机号运营商的方法

      js判断手机号运营商的方法

      这篇文章主要介绍了js判断手机号运营商的方法£¬需要的朋友可以参考下
      2015-10-10
    5. Bootstrap表单简单实现代码

      Bootstrap表单简单实现代码

      这篇文章主要为大家详细介绍了Bootstrap表单的简单实现代码£¬具有一定的参?#25216;?#20540;£¬感兴趣的小伙伴们可以参考一下
      2017-03-03
    6. JavaScript的for循环中嵌套一个点击事件的问题解决

      JavaScript的for循环中嵌套一个点击事件的问题解决

      本文主要介绍了JavaScript的for循环中嵌套一个点击事件点击一次弹出多个相同的值的解决方法£¬具有很好的参?#25216;?#20540;¡£下面跟?#21028;?#32534;一起来看下吧
      2017-03-03
    7. JS加jquery简单实?#30452;?#31614;元素的显示或隐藏

      JS加jquery简单实?#30452;?#31614;元素的显示或隐藏

      标签元素的显示或隐藏在使用中还是挺频繁的£¬下面有个不错的示例£¬大家可以参考下£¬或许有所帮助
      2013-09-09
    8. JS比较2个日期间隔的示例代码

      JS比较2个日期间隔的示例代码

      这篇文章主要介绍了JS比较2个日期间隔的方法,需要的朋友可以参考下
      2014-04-04
    9. 谈谈PHP中相对路径的问题与绝对路径的使用

      谈谈PHP中相对路径的问题与绝对路径的使用

      经常看到有人踩在了PHP路径的坑上面了£¬感觉有必要来说说PHP中相对路径的一些坑£¬以及PHP中绝对路径的使用£¬下面一起来看?#30784;?
      2016-08-08
    10. 最新评论

      常用在线小工具

      3dÊÔ»úºÅÖвÊÍø

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>