1、空对象、空引用以及undefined三种概念的区别
- 空对象:是对象,但它的值是指向没有任何属性的对象的引用, {}是指 不含任何属性 的对象,当然对象属性包括 字面值和函数;
- 空引用:obj=null 是指 变量值指向null变量 ,null是对象,但是空引用(不指向任何对象);
var a = null; console.log(typeof null); //object 注意:null 参与数值运算时其值会自动转换为 0 console.log(null + 123);//123 console.log(null * 123);//0
- undefined:未定义,所以不是对象,本身被定义为“undefined”这一特殊类型,当然在js默认不赋值的情况下,一个变量为undefined.;
var a; console.log(a); //undefined console.log(typeof a); //undefined 注意:undefined参与任何数值计算时,其结果一定是NaN。NAN不等于任何数,包括自己,任何数加NAN都是NAN; NAN == NANA(false)
- null 与 undefined的区别
console.log(null == undefined);//true ==只需要判断值是否相等 //ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的 console.log(null === undefined);//false ===需要判断类型与值是否全部相等 console.log(typeof null == typeof undefined);//false
2、判断是否为空对象的几种方式
- .将Json对象转化为json字符串,再判断该字符串是否为"{}";
var a = {}; console.log(JSON.stringify(a) == "{}");//true ===同样为true
- for in语法
- 简单遍历
var a = {}; function isEmptyObj(obj) { for (var key in obj) { return false; } return true; } console.log(isEmptyObj(a));//true
- 遍历原型及自身上的可枚举属性,需要结合hasOwnProperty去除原型上的可枚举属性
var a = {}; function isEmptyObj(obj) { for (var key in obj) { if ({}.hasOwnProperty.call(obj, key)) return false; } return true; } console.log(isEmptyObj(a));//true
- 简单遍历
- Object.getOwnPropertyNames()方法 ----- 返回不包括原型上的所有自身属性(包括不可枚举的属性)
var a = {}; //获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的length来判断此对象是否为空 //注意:此方法不兼容ie8,其余浏览器没有测试 console.log(Object.getOwnPropertyNames(a).length === 0);//true
- 使用ES6的Object.keys()方法,与上述方法类似,返回值也是对象中属性名组成的数组
var a = {}; console.log(Object.keys(a).length === 0);//true 返回不包括原型上的可枚举属性,即自身的可枚举属性
- jquery的isEmptyObject方法
var a = {}; //此方法是jquery将(for in)进行封装,使用时需要依赖jquery console.log($.isEmptyObject(a)); //true
3、遇到的问题
暂无