在JavaScript中,如果你想要检查一个对象是否是一个普通的对象,而不是其他特殊类型的对象(如Date、Array、RegExp等),你可以使用多种方法来实现这一点。以下是一些常见的方法:
Object.prototype.toString.call()
Object.prototype.toString.call()
方法可以返回一个表示对象类型的字符串。对于普通对象,它会返回 "[object Object]"
。
function isPlainObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
console.log(isPlainObject({})); // true
console.log(isPlainObject(new Date())); // false
console.log(isPlainObject([])); // false
你可以检查对象的构造函数是否是 Object
。
function isPlainObject(obj) {
return obj && typeof obj === 'object' && obj.constructor === Object;
}
console.log(isPlainObject({})); // true
console.log(isPlainObject(new Date())); // false
console.log(isPlainObject([])); // false
lodash
库如果你已经在项目中使用了 lodash
库,可以直接使用 _.isPlainObject()
方法。
const _ = require('lodash');
console.log(_.isPlainObject({})); // true
console.log(_.isPlainObject(new Date())); // false
console.log(_.isPlainObject([])); // false
问题:为什么 isPlainObject(new Date())
返回 false
?
原因:new Date()
创建的是一个 Date
对象,而不是一个普通的对象。Date
对象有自己的构造函数 Date
,因此不符合普通对象的定义。
解决方法:使用上述方法之一来明确检查对象是否为普通对象。
通过这些方法,你可以有效地检查一个对象是否是普通的JavaScript对象,从而在开发过程中避免潜在的问题。
领取专属 10元无门槛券
手把手带您无忧上云