• JavaScript 数据结构相关知识点 如何判断对象是否为空


    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
  • 相关阅读:
    低版本客户端连接oracle12c报错ORA-28040: No matching authentication protocol
    2024.6.15 英语六级 经验与复盘
    css怎样设置文本格式两端对齐
    常见git提交规范
    Springboot毕设项目动物保护协会系统fn275(java+VUE+Mybatis+Maven+Mysql)
    栈的实现及OJ练习(c语言)
    ant Design vue中a-row 内容不会垂直居中
    WPF handyControl 学习样例
    java毕业设计儿童教育系统Mybatis+系统+数据库+调试部署
    Pytorch linear 多维 输入的参数
  • 原文地址:https://blog.csdn.net/qq_41370833/article/details/125460966