在JavaScript中,判断一个变量是否为对象是一个常见的需求。以下是几种常用的方法:
typeof
操作符typeof
是最基本的类型判断操作符,但它对于对象的判断并不总是准确的,因为 typeof null
也会返回 "object"
,而且数组也会被判断为对象。
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof null); // "object"
Object.prototype.toString
方法这种方法可以更准确地判断一个变量是否为普通对象(即通过 {}
或 new Object()
创建的对象)。
function isObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
console.log(isObject({})); // true
console.log(isObject([])); // false
console.log(isObject(null)); // false
instanceof
操作符instanceof
可以用来判断一个对象是否是某个构造函数的实例。但需要注意的是,如果对象来自不同的执行上下文(比如不同的iframe),instanceof
可能会失效。
console.log({} instanceof Object); // true
console.log([] instanceof Object); // true
console.log([] instanceof Array); // true
Array.isArray
方法配合 typeof
如果你只想判断一个变量是否为普通对象(不包括数组和null),可以结合使用 typeof
和 Array.isArray
。
function isPlainObject(obj) {
return typeof obj === 'object' && obj !== null && !Array.isArray(obj);
}
console.log(isPlainObject({})); // true
console.log(isPlainObject([])); // false
console.log(isPlainObject(null)); // false
instanceof
可能会因为原型链的原因而返回意外的结果。选择哪种方法取决于你的具体需求和上下文。通常情况下,Object.prototype.toString
提供了最可靠的判断普通对象的方式。
领取专属 10元无门槛券
手把手带您无忧上云