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进行比较。