万事开头难,博客第一篇就写点简单的吧。
ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number 和 String。还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。
Boolean、Number 和 String就不用说了,用“===”即可进行相等判断,剩下的四种在控制台log的结果如下:
undefined === undefined // true
null===null // true
{}==={} // false
[] === [] // false
也就是说,只有引用类型的{}和[]不能用“===”来进行相等判断,因为即使都是空的,每个{}或[]在内存中的地址也不一样。

那如何判定一个对象为空呢?
思路有以下两种:
- 空对象自身没有属性。
- 空对象可转换成字符串==="{}"。
针对第一种,有以下几种方法:
- for in 循环判断
var obj = {};
var b = function() {
for(var key in obj) {
return false;
}
return true;
}
alert(b()); //true
- 使用ES6的Object.keys()方法
这是ES6的新方法, 返回值也是对象中属性名组成的数组。
var data = {};
var arr = Object.keys(data);
alert(arr.length == 0);//true
- 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
网友评论