本篇文章小编给大家分享一下原生javascript中检查对象是否为空实现代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
下面的代码片段,用于检查对象是否为空。 对于较新的浏览器,你可以使用 ES6 的 “Object.keys”。对于较旧的浏览器,可以安装Lodash库并使用其“ isEmpty”方法。
const empty = {}; /* ------------------------- 较新的浏览器 ----------------------------*/ Object.keys(empty).length === 0 && empty.constructor === Object // true /* ------------------------- 老版本的浏览器可以使用 Lodash ----------------------------*/ _.isEmpty(empty) // true
什么是原生 JavaScript
原生 JavaScript 指的是不使用框架或库。 它只是常规的普通 JavaScript,没有使用Lodash或jQuery之类的库。
A.在较新的浏览器中检查空对象
我们可以使用内置的Object.keys方法检查空对象。
const empty = {}; Object.keys(empty).length === 0 && empty.constructor === object;
为什么我们需要额外的constructor检查?
你可能想知道为什么我们需要对constructor进行检查。 它是为了覆盖包装器实例。在JavaScript中,我们有9个内置的构造函数。
new Object(); new String(); new Number(); new Boolean(); new Array(); new RegExp(); new Function(); new Date();
这里,我们可以使用new Object()创建一个空对象。
const obj = new Object(); Object.keys(obj).length === 0; // true
因此,仅使用Object.keys,当对象为空时,它的确会返回true。 但是,当我们使用其他构造函数创建新的对象实例时会发生什么。
function badEmptyCheck(value) { return Object.keys(value).length === 0; } 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
通过检查 constructor 解决误报
通过添加构造函数检查来纠正这个错误。
function goodEmptyCheck(value) { Object.keys(value).length === 0 && value.constructor === Object; // constructor check } goodEmptyCheck(new String()); // false goodEmptyCheck(new Number()); // false goodEmptyCheck(new Boolean()); // false goodEmptyCheck(new Array()); // false goodEmptyCheck(new RegExp()); // false goodEmptyCheck(new Function()); // false goodEmptyCheck(new Date()); // false
对其他值进行空检查
接着,我们用一些值上测试我们的方法,看看我们会得到了什么
function isEmptyObject(value) { return Object.keys(value).length === 0 && value.constructor === Object; }
到目前为止看起来不错,对于非对象它返回false。
isEmptyObject(100) // false isEmptyObject(true) // false isEmptyObject([]) // false
但是要当心! 下面这些值会引发错误。
// TypeError: Cannot covert undefined or null to object isEmptyObject(undefined); isEmptyObject(null);
改进对null和undefined的空检查
如果不想让它抛出TypeError,可以添加额外的检查
function isEmptyObject(value) { return value && Object.keys(value).length === 0 && value.constructor === Object; }
B.旧版本浏览器中的空对象检查
如果你需要支持较旧的浏览器怎么办? 大家都知道,当说旧的浏览器时,指的是IE,我们有2个选择,使用原生或利用库。
使用 JavaScript 检查空对象
原生的 JS 并不那么简洁,但判断用来空对象是没问题的。
function isObjectEmpty(value) { return ( Object.prototype.toString.call(value) === '[object Object]' && JSON.stringify(value) === '{}' ); }
对于对象,它返回true。
isObjectEmpty({}); // true isObjectEmpty(new Object()); // true
其它类型的构造函数也能正常判断
isObjectEmpty(new String()); // false isObjectEmpty(new Number()); // false isObjectEmpty(new Boolean()); // false isObjectEmpty(new Array()); // false isObjectEmpty(new RegExp()); // false isObjectEmpty(new Function()); // false isObjectEmpty(new Date()); // false
传入null和undefined也不会报TypeError。
isObjectEmpty(null); // false isObjectEmpty(undefined); // false
使用外部库检查空对象
有大量的外部库可以用来检查空对象。而且大多数都对旧浏览器有很好的支持
Lodash _.isEmpty({}); // true Underscore _.isEmpty({}); // true jQuery jQuery.isEmptyObject({}); // true
原生 VS 库
答案是看情况而定!我非常喜欢尽可能地简化程序,因为我不喜欢外部库的开销。另外,对于较小的应用程序,我懒得设置外部库。
但如果你的应用程序已经安装了一个外部库,那么就继续使用它。你会比任何人都更了解你的应用程序。所以选择最适合你情况的方法。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整