JavaScript 中检测数据类型的方法有以下几种:
一、typeof 运算符:可以用于检测一个变量的数据类型。返回值是一个字符串,表示该变量的数据类型。
示例:
typeof "hello world"; // 返回 "string"
typeof 42; // 返回 "number"
typeof true; // 返回 "boolean"
typeof undefined; // 返回 "undefined"
typeof null; // 返回 "object"
typeof []; // 返回 "object"
typeof {}; // 返回 "object"
typeof function() {}; // 返回 "function"
需要注意的是:typeof null 返回的是 "object",这是一个历史遗留问题。
二、instanceof 运算符:可以用于检测一个对象是否属于某个类。返回值是一个布尔值,表示该对象是否是该类的实例。
示例
[] instanceof Array; // 返回 true
{} instanceof Object; // 返回 true
new Date() instanceof Date; // 返回 true
// 需要注意的是,由于 JavaScript 中的数组是一种特殊的对象,因此使用 instanceof 运算符检测数组时,会返回 true。
[] instanceof Object;
三、Object.prototype.toString 方法:可以用于获取一个对象的内部 [[Class]] 属性。返回值是一个字符串,表示该对象的数据类型。
示例
Object.prototype.toString.call("hello world"); // 返回 "[object String]"
Object.prototype.toString.call(42); // 返回 "[object Number]"
Object.prototype.toString.call(true); // 返回 "[object Boolean]"
Object.prototype.toString.call(undefined); // 返回 "[object Undefined]"
Object.prototype.toString.call(null); // 返回 "[object Null]"
Object.prototype.toString.call([]); // 返回 "[object Array]"
Object.prototype.toString.call({}); // 返回 "[object Object]"
Object.prototype.toString.call(function() {}); // 返回 "[object Function]"
这些方法之间的不同在于:
typeof: 运算符适用于基本数据类型和函数,但不适用于 null 和数组;
instanceof: 运算符适用于所有对象类型,但不适用于基本数据类型和函数;
Object.prototype.toString: 方法适用于所有对象类型。
因此,根据需要选择合适的方法来检测数据类型。
更多面试题请看:
存图,扫