JavaScript 的真值与假值 | 如何判断一个对象为空
前置知识
JavaScript
在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,例如条件语句if
、||
、&&
等。- JavaScript里的假值只有
false
、null
、undefined
、空字符、0
和NaN
。
可能{}和[]是引用类型,即使内容为空,但是地址值仍在存在?
如何判断一个对象为空
JSON.stringify
将对象转化为字符串,在判断是否是对对象JSON.stringify(obj) === '{}'
Object.keys({}).length ===0
Object.keys
不会遍历不可枚举的属性和Symbol属性Reflect.ownKeys(obj)===0
(推荐)Reflect.ownKeys
会遍历不可枚举的属性和Symbol属性
对象的遍历方法如Object.keys等介绍文章:https://blog.csdn.net/qq_41370833/article/details/132303942
判断了边界情况的判空方法
边界情况1举例
//常见的内置构造函数
new Object();
new String();
new Number();
new Boolean();
new Array();
new RegExp();
new Function();
new Date();
new Error();
function badEmptyCheck(value) {
return Object.keys(value).length === 0;
}
badEmptyCheck(new Object()); // true
badEmptyCheck(new String()); // true
badEmptyCheck(new Number()); // true
badEmptyCheck(new Boolean()); // true
badEmptyCheck(new Array()); // true
badEmptyCheck(new RegExp()); // true
badEmptyCheck(new Function()); // true
badEmptyCheck(new Date()); // true
badEmptyCheck(new Error();); // true
解决办法
对象隐式原型的值=对应构造函数的显式原型的值
function goodEmptyCheck(value) {
return Object.keys(value).length === 0 && value.constructor === Object;
}
边界情况2举例
Object.keys(null).length === 0; // TypeError
Object.keys(undefined).length === 0; // TypeError
解决办法
function goodEmptyCheck(value) {
// 增加判断不为空
return value && Object.keys(value).length === 0 && value.constructor === Object;
}