JavaScript有8种数据类型,typeof因历史bug和无法区分对象子类型而不够用;Object.prototype.toString.call()是最可靠判断方法,可精确识别所有内置类型。

JavaScript 有 8 种数据类型:7 种原始类型(string、number、boolean、null、undefined、symbol、bigint)和 1 种引用类型(object,包括 Array、Function、Date、RegExp、Map、Set 等所有非原始值)。
为什么 typeof 不够用?
typeof 是最常用的方法,但它在几个关键地方会“撒谎”:
-
typeof null === 'object'—— 这是历史 bug,至今未修复 -
typeof [] === 'object'、typeof {} === 'object'、typeof new Date() === 'object'—— 全部返回'object',无法区分具体类型 -
typeof function(){} === 'function'虽然正确,但function本质仍是object,只是被特殊对待
准确判断类型的推荐方法:Object.prototype.toString.call()
这是最可靠、兼容性最好、且能区分内置对象类型的方式。它利用每个内置构造函数在内部定义的 [[Class]] 标签(ES5 规范),返回形如 "[object Array]" 的字符串:
-
Object.prototype.toString.call([])→"[object Array]" -
Object.prototype.toString.call(null)→"[object Null]" -
Object.prototype.toString.call(undefined)→"[object Undefined]" -
Object.prototype.toString.call(new Set())→"[object Set]" -
Object.prototype.toString.call(42n)→"[object BigInt]"
你可以封装一个通用判断函数:
立即学习“Java免费学习笔记(深入)”;
标签: javascript java js node.js node 为什么
还木有评论哦,快来抢沙发吧~