📜  如何在 JavaScript 中检查变量或对象的类型?(1)

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

如何在 JavaScript 中检查变量或对象的类型?

在 JavaScript 中,有时候需要检查变量或对象的类型,以便在程序中做出正确的处理。本文将介绍几种常见的方法来检查变量或对象的类型。

typeof 操作符

typeof 操作符用于检查操作数的类型,返回值为表示数据类型的字符串。JavaScript 中的数据类型包括:undefined、boolean、string、number、bigint、symbol、object 和 function。

使用 typeof 操作符可以判断基本数据类型的变量或字面量的类型,例如:

typeof undefined // "undefined"
typeof true // "boolean"
typeof "hello" // "string"
typeof 123 // "number"
typeof 10n // "bigint"
typeof Symbol() // "symbol"
typeof null // "object"
typeof function() {} // "function"

需要注意的是,null 被 typeof 操作符判断为 "object" 类型,这是 JavaScript 语言的历史遗留问题。

对于对象类型的变量或字面量,无法用 typeof 操作符来判断其真正的类型。例如:

typeof {} // "object"
typeof [] // "object"
typeof new Date() // "object"
typeof /\d+/gi // "object"

以上所有对象类型的变量或字面量,都被 typeof 操作符判断为 "object" 类型。

instanceof 操作符

instanceof 操作符用于判断一个对象是否为某个类的实例。例如可以使用 instanceof 操作符判断 Date 对象是否为 Date 类的一个实例:

let date = new Date();
console.log(date instanceof Date); // true

需要注意的是,instanceof 操作符只能用于判断对象是否为类的实例,不能用于判断基本数据类型。

Object.prototype.toString 方法

Object.prototype.toString 方法是 JavaScript 中较为安全和通用的判断变量类型的方法。它返回一个字符串,该字符串表明调用 toString() 方法的值的类型。例如:

Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call('hello'); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(Symbol()); // "[object Symbol]"
Object.prototype.toString.call(function() {}); // "[object Function]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"

需要注意的是,只有通过 Object.prototype.toString 方法才能正确地判断对象类型。因为该方法会根据对象的原型链来判断其类型。

typeof 与 instanceof 的注意事项

typeof 操作符只能用于判断基本数据类型以及 function 类型,不能用于判断对象类型。

instanceof 操作符只能用于判断对象是否为类的实例,不能用于判断基本数据类型。

在使用 typeof 或 instanceof 操作符时,需要处理 null 值的情况。

结论

在 JavaScript 中,判断一个变量或对象的类型有多种方法可用。typeof 操作符可以判断基本数据类型的变量或字面量的类型,但无法判断对象类型。instanceof 操作符可以判断对象是否为某个类的实例。而 Object.prototype.toString 方法可以比较准确地判断一个变量或对象的类型。在使用 typeof 或 instanceof 操作符时,需要注意各自的限制和null值带来的影响。