📅  最后修改于: 2023-12-03 15:20:42.773000             🧑  作者: Mango
在 JavaScript 中,我们可以用 typeof
运算符来判断一个变量的类型,包括 undefined
、boolean
、number
、string
、function
、object
和 symbol
等。但是,当我们试图用 typeof
判断一个数组时,会发现它返回的是 "object"
,而不是我们期望的 "array"
类型。
typeof
数组的限制const arr = [1, 2, 3];
console.log(typeof arr); // "object"
由于 JavaScript 中的数组实际上是一种特殊的对象,因此 typeof
运算符无法准确判断一个变量是否是数组类型。这也是 typeof
运算符的局限性之一。
为了准确地判断一个变量是否是数组类型,我们可以采用以下方法:
Array.isArray()
方法Array.isArray()
方法是 ECMAScript 5 引入的方法,用于判断一个变量是否是数组类型。它返回一个布尔值,如果变量是数组则返回 true
,否则返回 false
。
const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true
const obj = {a: 1, b: 2};
console.log(Array.isArray(obj)); // false
instanceof
运算符instanceof
运算符可以用于判断一个对象是否是某个构造函数的实例,包括数组类型。它返回一个布尔值,如果对象是构造函数的实例则返回 true
,否则返回 false
。
const arr = [1, 2, 3];
console.log(arr instanceof Array); // true
const obj = {a: 1, b: 2};
console.log(obj instanceof Array); // false
需要注意的是,如果数组是通过 window.open()
、iframe
等方式创建的,它将不再是数组类型,而是 window
或 iframe
对象。因此,在这种情况下,使用 instanceof
运算符判断数组类型将会返回 false
。
Object.prototype.toString.call()
方法Object.prototype.toString.call()
方法返回对象的类型字符串,包括 [object Array]
、[object Object]
、[object String]
等。对于数组类型,它返回 [object Array]
。
const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr)); // "[object Array]"
const obj = {a: 1, b: 2};
console.log(Object.prototype.toString.call(obj)); // "[object Object]"
尽管 JavaScript 中的 typeof
运算符无法准确判断一个变量是否是数组类型,但我们可以采用 Array.isArray()
方法、instanceof
运算符和 Object.prototype.toString.call()
方法来判断一个变量是否是数组类型。在实际开发中,我们应选择最适合场景的方法,以确保程序的运行正确性和性能效率。