JavaScript面试题-JavaScript 中检测数据类型的方法有哪些?都有什么不同?

202 阅读1分钟

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: 方法适用于所有对象类型。

因此,根据需要选择合适的方法来检测数据类型。
更多面试题请看:

存图,扫

daan-s.png