JavaScript 的真值与假值 | 如何判断一个对象为空

文章目录

  • JavaScript 的真值与假值 | 如何判断一个对象为空
    • 前置知识
    • 如何判断一个对象为空
      • 判断了边界情况的判空方法

JavaScript 的真值与假值 | 如何判断一个对象为空

前置知识

  1. JavaScript 在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,例如条件语句if||&&等。
  2. JavaScript里的假值只有falsenullundefined、空字符、0NaN

可能{}和[]是引用类型,即使内容为空,但是地址值仍在存在?

如何判断一个对象为空

  • 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;
}

你可能感兴趣的:(javascript,开发语言,ecmascript)