如何在 JavaScript 中检查对象是否为空 – JS Java isEmpty 等效项
对象是编程中最常用的数据类型之一。对象是存储为键值对的相关数据的集合。例如:
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14,
}
使用对象时,您可能需要在执行函数之前检查对象是否为空。
在 JavaScript 中,有多种方法可以检查对象是否为空。在本文中,您将了解执行此操作的各种方法、可以附加的选项以及原因。
注意:当一个对象没有键值对时,该对象被认为是空的。
如果您很着急,这里有一个基本示例:
const myEmptyObj = {};
// Works best with new browsers
Object.keys(myEmptyObj).length === 0 && myEmptyObj.constructor === Object
// Works with all browsers
_.isEmpty(myEmptyObj)
两种方法都会返回true. 现在让我们了解这些以及更多可用于检查 JavaScript 中对象是否为空的选项。
如何检查对象是否为空Object.keys()
该Object.keys()方法是 ECMAScript6 (ES6) 中引入的静态对象方法,所有现代浏览器都支持。此方法返回一个包含对象键的数组。例如:
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
console.log(Object.keys(userDetails)); // ["name","username","age"]
这样,您现在就可以应用该.length属性了。如果它返回零 (0),则该对象为空。
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
let myEmptyObj = {};
console.log(Object.keys(userDetails).length); // 3
console.log(Object.keys(myEmptyObj).length); // 0
现在,您可以使用此方法通过 if 语句检查对象是否为空,或创建一个进行检查的函数。
const isObjectEmpty = (objectName) => {
return Object.keys(objectName).length === 0
}
这将返回true或false。如果对象为空,则返回true,否则返回false。
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
let myEmptyObj = {};
const isObjectEmpty = (objectName) => {
return Object.keys(objectName).length === 0
}
console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true
注意:在检查对象是否为空或任何数据类型时,单独检查长度并不是最佳选择。最好始终确认数据类型是否正确。
为此,您可以使用构造函数检查:
const isObjectEmpty = (objectName) => {
return Object.keys(objectName).length === 0 && objectName.constructor === Object;
}
这样,您就可以得到更彻底的检查。
到目前为止,一切都很顺利。但您可能还希望避免TypeError在传递变量undefined或值null而不是 时抛出 a{}。要解决此问题,您可以添加额外的检查:
const isObjectEmpty = (objectName) => {
return (
objectName &&
Object.keys(objectName).length === 0 &&
objectName.constructor === Object
);
};
在上面的代码中,添加了额外的检查。这意味着如果它不是空对象,它将返回nullorundefined,如下例所示:
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
let myEmptyObj = {};
let nullObj = null;
let undefinedObj;
const isObjectEmpty = (objectName) => {
return (
objectName &&
Object.keys(objectName).length === 0 &&
objectName.constructor === Object
);
};
console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true
console.log(isObjectEmpty(undefinedObj)); // undefined
console.log(isObjectEmpty(nullObj)); // null
注意:这适用于其他对象静态方法,这意味着您可以使用Object.entries()或Object.values()代替Object.keys()。
for…in如何使用循环检查对象是否为空
您可以使用的另一种方法是 ES6for…in循环。您可以将此循环与该hasOwnProperty()方法一起使用。
const isObjectEmpty = (objectName) => {
for (let prop in objectName) {
if (objectName.hasOwnProperty(prop)) {
return false;
}
}
return true;
};
上面的方法将循环遍历每个对象属性。如果找到单个迭代,则该对象不为空。此外,hasOwnProperty()将返回一个布尔值,指示该对象是否具有指定的属性作为其属性。
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
let myEmptyObj = {};
const isObjectEmpty = (objectName) => {
for (let prop in objectName) {
if (objectName.hasOwnProperty(prop)) {
return false;
}
}
return true;
};
console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true
如何检查对象是否为空JSON.stringify()
您还可以使用该JSON.stingify()方法,该方法用于将 JavaScript 值转换为 JSON 字符串。这意味着它将把你的对象值转换为对象的字符串。例如:
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
console.log(JSON.stringify(userDetails));
Output:
"{'name':'John Doe','username':'jonnydoe','age':14}"
这意味着当它是一个空对象时,它将返回"{}"。您可以利用它来检查空对象。
const isObjectEmpty = (objectName) => {
return JSON.stringify(objectName) === "{}";
};
true如果对象为空,则返回false:
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
let myEmptyObj = {};
const isObjectEmpty = (objectName) => {
return JSON.stringify(objectName) === "{}";
};
console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true
如何使用 Lodash 检查对象是否为空
最后,我在这里解释的一些方法可能适用于较旧的浏览器版本,而其他方法可能不起作用。如果您担心一个同时适用于旧版和现代浏览器版本的解决方案,您可以使用Lodash。
Lodash 是一个现代 JavaScript 实用程序库,可以使用非常基本的语法执行许多 JavaScript 功能。
例如,如果你想检查一个对象是否为空,你只需要使用“isEmpty”方法。
_.isEmpty(objectName);
将 Lodash 安装到您的项目中非常简单。您所要做的就是使用这个命令:
$ npm install lodash
您现在可以初始化下划线方法并使用该方法。
const _ = require('lodash');
let userDetails = {
name: "John Doe",
username: "jonnydoe",
age: 14
};
let myEmptyObj = {};
const isObjectEmpty = (objectName) => {
return _.isEmpty(objectName);
};
console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true
就是这样!
我很喜欢探索检查对象是否为空的各种方法。请随意使用适合您的项目或任务的最佳方法。
祝你编码愉快!感谢关注 ~
领取专属 10元无门槛券
私享最新 技术干货