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

1. 检查基本数据类型

在JavaScript中,使用typeof关键字可以检查一个变量的基本数据类型,共有7种:

string - 字符串

number - 数字

bigint - 大整数

boolean - 布尔值

null - 空值

undefined - 未定义

symbol - 符号

下面是几个例子:

typeof "hello" // "string"

typeof 123 // "number"

typeof true // "boolean"

typeof undefined // "undefined"

typeof null // "object" (这是一个已知的历史遗留问题,本质上null不是对象)

2. 检查引用类型

JavaScript中的引用类型(Object和Array)需要使用 instanceof 关键字来检查。

2.1 检查对象

使用 instanceof、Object.prototype.toString.call()、Array.isArray() 或者 jQuery.type() 来检查一个对象。

instanceof:通过判断一个对象是否属于一个特定的构造函数来检查它的类型。可以检查内置的Object和Array对象,但是不能检查自定义的对象。

Object.prototype.toString.call():可以检查内置和自定义对象,返回格式为 "[object 对象类型]"。

Array.isArray():检查是否为数组类型。

jQuery.type():检查jQuery对象的类型,返回的字符串包括 "array"、"boolean"、"date"、"function"、"number"、"object"、"regexp"、"string"、"null"。

下面是一个例子:

var obj = {};

var arr = [];

console.log(obj instanceof Object); // true

console.log(arr instanceof Array); // true

console.log(Object.prototype.toString.call(obj)); // [object Object]

console.log(Object.prototype.toString.call(arr)); // [object Array]

console.log(Array.isArray(arr)); // true

console.log($.type(arr)); // "array"

2.2 检查函数

检查一个函数可以使用 typeof 来检查,只能确定它是否为函数类型,无法检查是内置函数、自定义函数还是匿名函数。

下面是一个例子:

function foo() {}

console.log(typeof foo); // "function"

2.3 检查null

null与undefined并不是一个对象类型。两者都没有属性和方法,但是它们的类型都是object。使用typeof和Object.prototype.toString.call()都会返回object。可以使用该变量与null进行比较来检查它是否为null。

下面是一个例子:

var a = null;

console.log(typeof a); // "object"

console.log(Object.prototype.toString.call(a)); // [object Null]

if (a === null) {

console.log("a is null");

}

3. 总结

在JavaScript中,我们可以使用typeof、instanceof、Object.prototype.toString.call()、Array.isArray() 或者 jQuery.type()来检查变量或对象的类型。对于基本数据类型,我们使用typeof。对于引用数据类型,我们可以使用instanceof、Object.prototype.toString.call()或者自带的方法比如Array.isArray()。需要注意的是,在检查null的时候,不能直接使用typeof 或 Object.prototype.toString.call() 来检查其类型,而是需要与null进行比较。