码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JavaScript 数据结构相关知识点 如何判断对象是否为空


    文章目录

    • JavaScript 数据结构相关知识点
      • 如何判断一个对象为空
        • 对象的遍历方法
        • Object.keys() + Object.getOwnPropertySymbols
        • Reflect.ownKeys() 优先使用

    JavaScript 数据结构相关知识点

    如何判断一个对象为空

    对象的遍历方法

    方法描述遍历不可枚举属性遍历继承属性遍历Symbol属性
    Object.keys(obj)
    Object.values(obj)
    Object.entries(obj)
    所有键名
    所有键值
    [[键名,键值],[键名,键值]]
    ×××
    for-in键名×√×
    Object.hasOwnProperty ()判断是否存在某个key×√×
    Object.getOwnPropertyNames()键名√××
    Object.getOwnPropertySymbols()获取symbol对象的键名--√
    Reflect.ownKeys(obj)键名√×√

    Object.keys() + Object.getOwnPropertySymbols

    Object.keys()方法会返回一个由给定对象的自身可枚举属性组成的数组

    如果Object.keys()返回的迭代器对象长度为0,说明该对象是空对象。

    function objectIsNull(obj){
    	if(Object.keys(obj).length== 0) return true;
    	else return false;
    }
    
    • 1
    • 2
    • 3
    • 4

    还需要判断是否为对象的构造函数,在JS中有9个内置构造函数,调用该函数返回的结果都为true。还需要考虑边界情况比如null或者undefined

    new Object();
    
    new String();
    new Number();
    new Boolean();
    new Array();
    new RegExp();
    new Function();
    new Date();
    new Error();
    objectIsNull(new String()); //true
    
    //TypeError
    Object.keys(null).length === 0;  
    Object.keys(undefined).length === 0; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    修改版本

    function objectIsNull(obj){
    	return  obj&& Object.keys(obj).length === 0 && obj.constructor === Object;
    }
    
    • 1
    • 2
    • 3

    如果属性是Symbol对象,这个函数会判断错误

    const a = { [Symbol()]: 'a' }
    objectIsNull(a); //false
    
    • 1
    • 2

    可以通过Object.getOwnPropertySymbols()方法判断是否存在Symbol对象

    function objectIsNull(obj){
    	return  obj&& Object.keys(obj).length === 0 && obj.constructor === Object && Object.getOwnPropertySymbols(b).length === 0;
    }
    
    • 1
    • 2
    • 3

    如果不可枚举对象也需要判断,那么可以将Object.keys换成Object.getOwnPropertyName

    function objectIsNull(obj){
    	return  obj&& Object.getOwnPropertyNames(obj).length === 0 && obj.constructor === Object && Object.getOwnPropertySymbols(b).length === 0;
    }
    
    • 1
    • 2
    • 3

    Reflect.ownKeys() 优先使用

    Reflect.ownKeys 方法返回一个由目标对象自身的属性键组成的数组。它的返回值等同Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))

    1.如果目标不是Object会抛出TypeError错误
    2.自身的属性,包括了Symbol对象的属性和不可枚举属性

    function objectIsNull(obj){
    	return Reflect.ownKeys(c).length === 0// true
    }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    ElasticSearch(三)【索引、映射、文档】
    GAN!生成对抗网络GAN全维度介绍与实战
    大饼简记.
    【正点原子I.MX6U-MINI应用篇】4、嵌入式Linux关于GPIO的一些操作
    Spark RDD弹性分布式数据集
    【springboot系列】springboot启动过程源码分析,【最全源码源码,手把手教】
    【代码随想录】贪心算法刷题
    如何在生产环境排查 Rust 内存占用过高问题
    CentOS 7镜像下载 以及 DVD ISO 和 Minimal ISO 等各版本的区别介绍
    ASP.NET Core 6框架揭秘实例演示[25]:配置与承载环境的应用
  • 原文地址:https://blog.csdn.net/qq_41370833/article/details/125460966
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号