JavaScript 数据类型判断方法详解:typeof、instanceof 与 Object.prototype.toString

作者:半夏时间:2026-10-30 21:51:39浏览:558

本文系统总结了 JavaScript 中判断数据类型的多种方法。首先分析 typeof 运算符在处理基本类型时的局限性,特别是其对 null、Object 和 Array 的识别缺陷。接着详细讲解判断数组的五种方式,包括 instanceof、constructor、Object.prototype.toString、Array.isArray 以及原型链检查。最后介绍判断普通对象的有效手段,帮助开发者根据具体场景选择最合适的类型判断方案。

JavaScript 数据类型概览

  • string:字符串类型
  • number:数值类型
  • boolean:布尔类型
  • undefined:未定义类型
  • null:空值类型
  • object:对象类型(涵盖数组与函数)
  • symbol:符号类型,ES6引入的唯一值

一、typeof运算符的局限性

typeof 可识别 string、number、boolean、undefined、symbol、function 等类型,但无法准确识别 null、object 类型。

var str = "Hello";
var num = 123;
var bool = true;
var undf;
var nl = null;
var obj = {name: "John", age: 25};
var arr = [1, 2, 3];
var func = function() {};
var sym = Symbol("mySymbol");
console.log(typeof str);    // 输出:string
console.log(typeof num);    // 输出:number
console.log(typeof bool);   // 输出:boolean
console.log(typeof undf);   // 输出:undefined
console.log(typeof nl);     // 输出:object
console.log(typeof obj);    // 输出:object
console.log(typeof arr);    // 输出:object
console.log(typeof func);   // 输出:function
console.log(typeof sym);    // 输出:symbol

注意:typeof 无法区分 null、Object、Array。typeof 对这三种类型的返回值均为 'object'。

二、数组类型检测方法

方法1

利用 instanceof 操作符可检测数据是否为数组实例。

[] instanceof Array // true

需注意的是,instanceof 不能用于判断普通对象类型,因为数组本质上也是对象。

[] instanceof Object // true
{} instanceof Object // true

方法2

通过 constructor 属性亦可检测数组类型。

[].constructor === Array // true

方法3

调用 Object.prototype.toString.call() 可获取对象的内部类型标签。

Object.prototype.toString.call([]) === '[object Array]' // true
Object.prototype.toString.call({}) === '[object Object]' // true

该方法同样适用于判断 Promise 对象。

let obj = new Promise()
Object.prototype.toString.call(obj) === '[object Promise]' // true

方法4

调用数组内置的 isArray() 静态方法进行判断。

Array.isArray([]) // true

方法5

Object.getPrototypeOf(val) === Array.prototype // true 

三、对象类型检测方法

方法1(推荐)

调用 Object.prototype.toString.call() 可获取对象的内部类型标签。

Object.prototype.toString.call({}) === '[object Object]' // true

方法2

Object.getPrototypeOf(val) === Object.prototype // true

本文关于JavaScript数据类型判断方法的总结到此结束,更多相关JavaScript判断数据类型内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章