JavaScript 的真值与假值 | 如何判断一个对象为空
前置知识
JavaScript在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,例如条件语句if、||、&&等。- JavaScript里的假值只有
false、null、undefined、空字符、0和NaN。
可能{}和[]是引用类型,即使内容为空,但是地址值仍在存在?
如何判断一个对象为空
JSON.stringify将对象转化为字符串,在判断是否是对对象JSON.stringify(obj) === '{}'Object.keys({}).length ===0Object.keys不会遍历不可枚举的属性和Symbol属性Reflect.ownKeys(obj)===0(推荐)Reflect.ownKeys会遍历不可枚举的属性和Symbol属性
对象的遍历方法如Object.keys等介绍文章:https://blog.youkuaiyun.com/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;
}
2100

被折叠的 条评论
为什么被折叠?



