以下代码片段用于检查对象是否为空。对于较新的浏览器,您可以使用ES6的“Object.keys”。🍦对于旧版浏览器,您可以安装Lodash库并使用其“isEmpty”方法。蔑视={};/*------------------------较新的浏览器------------------------*/Object.keys(empty).length===0&&empty.constructor===Object//true/*--------------------------旧浏览器可以使用Lodash-----------------------------*/_.isEmpty(empty)//true什么是原生JavaScript?原生JavaScript是指不使用框架或库。它只是普通的纯JavaScript,没有使用像Lodash或jQuery这样的库。A.在较新的浏览器中检查空对象我们可以使用内置的Object.keys方法检查空对象。constempty={};Object.keys(empty).length===0&&empty.constructor===object;为什么我们需要额外的构造函数检查?您可能想知道为什么我们需要构造函数检查。它旨在覆盖包装器实例。在JavaScript中,我们有9个内置构造函数。newObject();newString();newNumber();newBool??ean();newArray();newRegExp();newFunction();newDate();在这里,我们可以使用newObject()创建一个空对象。注意:切勿使用构造函数来创建对象。这被认为是不好的做法,请参阅Airbnb风格指南和ESLint。constobj=newObject();Object.keys(obj).length===0;//true因此只需使用Object.keys,当对象为空时它会返回true。但是当我们使用其他构造函数创建新的对象实例时会发生什么。functionbadEmptyCheck(value){returnObject.keys(value).length===0;}badEmptyCheck(newString());//true😱badEmptyCheck(newNumber());//true😱badEmptyCheck(newBool??ean()));//true😱badEmptyCheck(newArray());//true😱badEmptyCheck(newRegExp());//true😱badEmptyCheck(newFunction());//true😱badEmptyCheck(newDate)());//真😱通过检查构造函数解决误报通过添加构造函数检查更正此错误。functiongoodEmptyCheck(value){Object.keys(value).length===0&&value.constructor===Object;//👈constructorcheck}goodEmptyCheck(newString());//false?goodEmptyCheck(newNumber());//false?goodEmptyCheck(newBool??ean());//false?goodEmptyCheck(newArray());//false?goodEmptyCheck(newRegExp());//false?goodEmptyCheck(newFunction());//false?goodEmptyCheck(newDate());//false?不错,干得不错👍Null检查其他值接下来,让我们在一些值上测试我们的方法,看看我们得到了什么🧪functionisEmptyObject(value){returnObject.keys(value).length===0&&value.constructor===Object;}到目前为止看起来不错,对于非对象它返回false。isEmptyObject(100)//falseisEmptyObject(true)//falseisEmptyObject([])//false但要小心!以下值会抛出错误。//TypeError:CannotcoverundefinedornulltoobjectisEmptyObject(undefined);isEmptyObject(null);改进对null和undefined的空检查如果你不想让它抛出TypeError,你可以添加额外的检查functionisEmptyObject(value){returnvalue&&Object.keys(value)。length===0&&value.constructor===Object;}B.旧浏览器中的空对象检查如果您需要支持旧浏览器怎么办?大家都知道,当我们谈论旧浏览器时,我们指的是IE。我们有2个选项,使用本机或利用库。使用JavaScript判断空对象NativeJS没有那么简洁,但是判断空对象是没有问题的。functionisObjectEmpty(value){return(Object.prototype.toString.call(value)==='[objectObject]'&&JSON.stringify(value)==='{}');}对于对象,它返回true。isObjectEmpty({});//true?isObjectEmpty(newObject());//true?其他类型的构造函数也可以正常判断#128521;isObjectEmpty(newString());//false?isObjectEmpty(newNumber());//false?isObjectEmpty(newBool??ean());//false?isObjectEmpty(newArray());//false?isObjectEmpty(newRegExp());//false?isObjectEmpty(newFunction());//false?isObjectEmpty(newDate());//false?传入null和undefined不会报TypeError。isObjectEmpty(null);//falseisObjectEmpty(undefined);//false使用外部库检查空对象有大量外部库可用于检查空对象。大多数对旧浏览器都有很好的支持👍Lodash_.isEmpty({});//trueUnderscore_.isEmpty({});//truejQueryjQuery.isEmptyObject({});//真正的原生VS库答案取决于!我非常喜欢让程序尽可能简单,因为我不喜欢外部库的开销。另外,对于较小的应用程序,我懒得设置外部库。但是,如果您的应用程序已经安装了外部库,那么请继续使用它。您将比任何人都更了解您的应用程序。因此,选择最适合您情况的方法。达人的【三通】是小智持续分享的最大动力。本博客如有错误或建议,欢迎达人留言。最后谢谢大家的观看。作者:SamanthaMing译者:前端小智来源:medium原文:https://www.samanthaming.com/tidbits/94-how-to-check-if-object-is-empty/#what-is-javascript本文转载自微信公众号“伟大的走向世界”,您可以通过以下二维码关注。转载本文请联系大千世界公众号。
