资讯专栏INFORMATION COLUMN

判断一个对象是一个空对象的解决方案

neu / 3041人阅读

摘要:这种情况如果在日常使用的时候是可以使用第一种的,如果需要大数据交互中仅仅是某一个判断的话,还是用第二种吧,毕竟涉及到循环,性能差距还是很大的思考既然用到了,那么如何使用呢,兼容性如何呢,如何自己实现一个呢

如何判断一个对象是一个空对象(不带继承的原型属性,如果带的话只能用for in)

空对象的呈现是var obj = {}

    function IsEmptyObject(obj){
          if(!obj || typeof obj != "object" || Array.isArray(obj)){
            return false;
          }
            //第一种
            //测试性能段
            /*
            console.time("first");
            if(JSON.stringify(obj) === "{}"){
                console.timeEnd ("first");
                return true
            }else{
                console.timeEnd ("first");
                return false;
            }
            */
            return (JSON.stringify(obj) === "{}")
            //第二种
            console.time("second");
            for(var key in obj){
                console.timeEnd ("second");
                return false 
            }
            console.timeEnd ("second");
            return true;
            //第三种
            
            return (Object.keys(obj).length === 0)
    }
解决思路

第一种就是粗暴的直接转字符串,然后强行比较
第二种就是利用for in的原理,然后一旦进了循环,说明有key值,那就直接false啦,否则就是空对象

性能比较

下面测试一下两个方法的性能比较

第一种在a就是一个空对象的情况下,在Imac谷歌浏览器上平均耗时在0.012ms左右

第二种在a就是一个空对象的情况下,在Imac谷歌浏览器上平均耗时在0.007ms左右,性能差距为两倍

第一种在a是一个普通对象的情况下,豆瓣的api对象,在Imac谷歌浏览器上平均耗时在0.08ms左右

第二种在a是一个普通对象的情况下,豆瓣的api对象,在Imac谷歌浏览器上,第一次稍慢,0.02ms,平均耗时在0.0075ms左右,性能差距随着对象越大,差距也会越大

总结。
这种情况如果在日常使用的时候是可以使用第一种的,如果需要大数据交互中仅仅是某一个判断的话,还是用第二种吧,毕竟涉及到循环,性能差距还是很大的
思考

既然用到了JSON.stringify,那么JSON.stringfy/parse如何使用呢,兼容性如何呢,如何自己实现一个呢

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83371.html

相关文章

  • js基础(一):判断类型

    摘要:注意类继承时的问题继承自方法中对象直接继承和间接继承的都会报解决的问题通常是让对象的手动指向自己将自己的类赋值给对象的属性基类不会报了原博参考,,,,判断为 js基础(二):构造函数与原型 一、常见实例 判断是否为对象 let obj = {} // 1.Object.prototype.toString if (Object.prototype.toString.call(obj...

    hightopo 评论0 收藏0
  • 关于JSON.parse()和JSON.stringify()性能小测试

    摘要:我们一般用来深拷贝,其过程说白了,就是利用将对象序列化字符串,再使用来反序列化还原对象。至于这行代码为什么能实现深拷贝,以及它有什么局限性等等,不是本文要介绍的。小结论能不用和就不用,采用替代方案且性能更优的。 JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了,就是利用 JSON.stringify 将js对象序列化(JSON字符串),再使...

    oogh 评论0 收藏0
  • <<编写可维护javascript>> 笔记8(避免'比较&#

    摘要:中常常会看到这种代码变量与的比较这种用法很有问题用来判断变量是否被赋予了一个合理的值比如不好的写法执行一些逻辑这段代码中方法显然是希望是一个数组因为我们看到的拥有和这段代码的意图非常明显如果参数不是一个数组则停止接下来的操作这种写法的问题在 js中, 常常会看到这种代码: 变量与null的比较(这种用法很有问题), 用来判断变量是否被赋予了一个合理的值. 比如: const Contr...

    young.li 评论0 收藏0
  • 别再写 bug 了,避免指针 5 个案例!

    摘要:本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针。如何避免空指针下面说几个空指针的几个最常见的案例及解决之道。字符串比较,常量放前面这个时候可能为造成空指针异常,应该把常量放前面,就能避免空指针异常。 空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题。 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针。 什么是空指针? ...

    zzzmh 评论0 收藏0
  • JavaScript系列--类型判断4种基本方法,研究jquerytype方法,对象检测方法

    摘要:用对象字面量创建的对象会报错,使用构造函数创建的对象属于。发现,构造函数创建的,,,,。从原型链角度讲,构造函数就是新对象的的类型。 一、前言 类型判断有时候真的头疼,但是一旦熟练使用就会觉得不过如此。初级的,会判断数字和字符串。中级的,会判断数组和对象。进阶的,会判断日期,正则,错误类型。高级的,会判断plainObject,空对象,window对象等等。 基本类型:String、N...

    lavor 评论0 收藏0

发表评论

0条评论

neu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<