判断数组
- Array.isArray() 方法
这是最推荐的方法,简单明了。它可以检测数组的情况,并且不会误报其他类型。
const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // trueconst notArray = { key: 'value' };
console.log(Array.isArray(notArray)); // false
- instanceof 操作符
你可以使用 instanceof
操作符来检测一个对象是否是某个类的实例。在这种情况下,检测 Array
的实例。
const arr = [1, 2, 3];
console.log(arr instanceof Array); // trueconst notArray = { key: 'value' };
console.log(notArray instanceof Array); // false
- Object.prototype.toString 方法
这种方法通过调用 Object.prototype.toString
可以获取更准确的结果,包括数组类型。
const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr) === '[object Array]'); // trueconst notArray = { key: 'value' };
console.log(Object.prototype.toString.call(notArray) === '[object Array]'); // false
判断对象
- typeof 操作符
使用 typeof
可以直接判断变量是否为对象,但对于数组和 null 的判断可能会产生误判。
const obj = { key: 'value' };
console.log(typeof obj === 'object' && obj !== null); // trueconst arr = [1, 2, 3];
console.log(typeof arr === 'object'); // trueconst notObject = null;
console.log(typeof notObject === 'object'); // true (这不是对象)
- Object.prototype.toString 方法
同样的,我们可以使用 Object.prototype.toString
来更准确地判断一个对象的类型。
const obj = { key: 'value' };
console.log(Object.prototype.toString.call(obj) === '[object Object]'); // trueconst arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr) === '[object Object]'); // false
- 简化函数
可以创建一个函数来封装判断对象的逻辑,这样更方便使用。
function isObject(value) {return value !== null && typeof value === 'object';
}// 使用示例
console.log(isObject({})); // true
console.log(isObject([])); // true
console.log(isObject(null)); // false
console.log(isObject(123)); // false
总结
- 判断 数组 最常用且推荐的方法是
Array.isArray()
,其次是instanceof
和Object.prototype.toString
。 - 判断 对象 通常使用
typeof
结合 null 的判断,或者使用Object.prototype.toString
方法来精确判断类型。