判断一个值是否为数组的方式有多种:
1. Array.isArray()
方法
- 描述:这是 ES5 引入的标准方法,推荐用于检查一个值是否为数组。
- 语法:
Array.isArray(value)
- 示例:
console.log(Array.isArray([1, 2, 3])); // true console.log(Array.isArray("hello")); // false
2. instanceof
操作符
- 描述:使用
instanceof
操作符来判断对象是否是Array
的实例。 - 语法:
value instanceof Array
- 示例:
console.log([1, 2, 3] instanceof Array); // true console.log("hello" instanceof Array); // false
3. Object.prototype.toString.call()
方法
- 描述:使用
Object.prototype.toString.call()
可以准确判断一个对象的类型,包括数组。它返回[object Array]
对于数组,其他类型则返回不同的结果。 - 语法:
Object.prototype.toString.call(value)
- 示例:
console.log(Object.prototype.toString.call([1, 2, 3])); // [object Array] console.log(Object.prototype.toString.call("hello")); // [object String]
4. constructor
属性
- 描述:检查
constructor
属性是否为Array
。这种方法不如Array.isArray()
可靠,因为constructor
可以被改变。 - 语法:
value.constructor === Array
- 示例:
console.log([1, 2, 3].constructor === Array); // true console.log("hello".constructor === Array); // false
5. Array.prototype.isPrototypeOf()
方法
- 描述:检查数组的
prototype
是否在目标对象的prototype
链上。这种方法也可以用来判断一个对象是否为数组。 - 语法:
Array.prototype.isPrototypeOf(value)
- 示例:
console.log(Array.prototype.isPrototypeOf([1, 2, 3])); // true console.log(Array.prototype.isPrototypeOf("hello")); // false
6. 使用 constructor
属性和原型链
-
描述:结合
constructor
属性和原型链检查。这个方法有一定的局限性,不推荐使用。 -
示例:
function isArray(value) { return value && typeof value === "object" && value.constructor === Array; } console.log(isArray([1, 2, 3])); // true console.log(isArray("hello")); // false