在 JavaScript 中,检测数据类型是一个常见的任务,因为 JavaScript 是一种弱类型语言,变量的类型可以在运行时改变。以下是一些常用的方法来检测数据类型:
-
typeof 操作符:
typeof
用于返回一个变量的数据类型。- 语法:
typeof variable
- 例子:
typeof "Hello"; // 返回 "string" typeof 42; // 返回 "number" typeof true; // 返回 "boolean" typeof undefined; // 返回 "undefined" typeof null; // 返回 "object"(注意这是一个常见的陷阱)
-
instanceof 操作符:
instanceof
用于检测一个变量是否是某个构造函数的实例。- 语法:
variable instanceof constructor
- 例子:
const date = new Date(); date instanceof Date; // 返回 true
-
Array.isArray() 方法:
Array.isArray()
用于检测一个值是否是一个数组。- 语法:
Array.isArray(value)
- 例子:
Array.isArray([1, 2, 3]); // 返回 true
-
Object.prototype.toString.call() 方法:
toString.call()
方法可以返回一个对象的类型,这个方法可以检测几乎所有的数据类型,包括null
和undefined
。- 语法:
Object.prototype.toString.call(value)
- 例子:
Object.prototype.toString.call(new Date()); // 返回 "[object Date]" Object.prototype.toString.call([1, 2, 3]); // 返回 "[object Array]" Object.prototype.toString.call(null); // 返回 "[object Null]" Object.prototype.toString.call(undefined); // 返回 "[object Undefined]"
-
isNaN() 函数:
isNaN()
用于检测一个值是否是 NaN(Not a Number)。- 语法:
isNaN(value)
- 注意:
isNaN()
会将非数字值转换为数字,然后检测结果是否为 NaN。 - 例子:
isNaN("Hello"); // 返回 true,因为 "Hello" 转换为数字是 NaN
-
isFinite() 函数:
isFinite()
用于检测一个值是否是有限的数字。- 语法:
isFinite(value)
- 例子:
isFinite(1/0); // 返回 false,因为 1/0 是无穷大
-
Number.isInteger() 和 Number.isSafeInteger():
Number.isInteger()
用于检测一个值是否是整数。Number.isSafeInteger()
用于检测一个值是否是安全整数(在 -9007199254740991 到 9007199254740991 之间的整数)。- 语法:
Number.isInteger(value)
和Number.isSafeInteger(value)
- 例子:
Number.isInteger(42); // 返回 true Number.isSafeInteger(9007199254740992); // 返回 false,超出安全整数范围
这些方法可以帮助你在 JavaScript 中准确地检测数据类型,以便编写更健壮和灵活的代码。