📜  typeof 数组 javascript (1)

📅  最后修改于: 2023-12-03 15:20:42.773000             🧑  作者: Mango

JavaScript 中的类型判断——typeof 数组

在 JavaScript 中,我们可以用 typeof 运算符来判断一个变量的类型,包括 undefinedbooleannumberstringfunctionobjectsymbol 等。但是,当我们试图用 typeof 判断一个数组时,会发现它返回的是 "object",而不是我们期望的 "array" 类型。

typeof 数组的限制
const arr = [1, 2, 3];
console.log(typeof arr); // "object"

由于 JavaScript 中的数组实际上是一种特殊的对象,因此 typeof 运算符无法准确判断一个变量是否是数组类型。这也是 typeof 运算符的局限性之一。

判断变量是否是数组的方法

为了准确地判断一个变量是否是数组类型,我们可以采用以下方法:

1. 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
2. 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 等方式创建的,它将不再是数组类型,而是 windowiframe 对象。因此,在这种情况下,使用 instanceof 运算符判断数组类型将会返回 false

3. 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() 方法来判断一个变量是否是数组类型。在实际开发中,我们应选择最适合场景的方法,以确保程序的运行正确性和性能效率。