从一个空对象说起

万事开头难,博客第一篇就写点简单的吧。

ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number 和 String。还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。

Boolean、Number 和 String就不用说了,用“===”即可进行相等判断,剩下的四种在控制台log的结果如下:

undefined === undefined //  true
null===null  //  true
{}==={}  //  false
[] === []  //  false

也就是说,只有引用类型的{}和[]不能用“===”来进行相等判断,因为即使都是空的,每个{}或[]在内存中的地址也不一样。

变量对象与堆内存

那如何判定一个对象为空呢?

思路有以下两种:

  1. 空对象自身没有属性。
  2. 空对象可转换成字符串==="{}"。

针对第一种,有以下几种方法:

  1. for in 循环判断
var obj = {};
var b = function() {
for(var key in obj) {
return false;
}
return true;
}
alert(b());  //true
  1. 使用ES6的Object.keys()方法
    这是ES6的新方法, 返回值也是对象中属性名组成的数组。
var data = {};
var arr = Object.keys(data);
alert(arr.length == 0);//true
  1. Object.getOwnPropertyNames()方法
    此方法是使用Object对象的getOwnPropertyNames方法,获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的length来判断此对象是否为空
    注意:此方法不兼容ie8,其余浏览器没有测试
var data = {};
var arr = Object.getOwnPropertyNames(data);
alert(arr.length == 0);//true

针对第二种,可将json对象转化为json字符串,再判断该字符串是否为"{}"。

var data = {};
var b = (JSON.stringify(data) == "{}");
alert(b);  //true

此外,还可以使用jquery的.isEmptyObjec或者lodash的isEqual等相关方法,只是需要引入相关依赖。

参考资料:
http://blog.csdn.net/pingfan592/article/details/55189622
http://blog.csdn.net/qq_38627581/article/details/77353015

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 三,字符串扩展 3.1 Unicode表示法 ES6 做出了改进,只要将码点放入大括号,就能正确解读该字符。有了这...
    eastbaby阅读 1,578评论 0 8
  • 1.属性的简洁表示法 允许直接写入变量和函数 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量...
    雨飞飞雨阅读 1,159评论 0 3
  • 公交车上,一对小情侣坐在倒数第二排,女孩抱着一只小狗,两个人逗着小狗玩,眼里尽是宠爱。小狗叫史努比,一个月前他们...
    偏执67阅读 361评论 0 0