JS如何判断变量类型?typeof与instanceof详解
时间:2026-01-07 08:57:37 443浏览 收藏
今天golang学习网给大家带来了《JavaScript如何判断变量类型?typeof和instanceof用法详解》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~
typeof判断基础类型(含function、symbol),instanceof判断引用类型是否由某构造函数创建;二者解决不同层面问题,混用易致误判。

typeof 和 instanceof 解决的是不同层面的问题:前者判断基础类型(含 function 和 symbol),后者判断引用类型是否由某个构造函数创建。混用或只依赖其中一个,很容易掉进类型误判的坑里。
typeof 只能识别基础类型,对大部分对象都返回 "object"
typeof 在 JavaScript 中是操作符,不是函数,它对原始值(string、number、boolean、undefined、symbol、bigint)和 function 能准确返回字符串标识,但对所有对象(包括数组、正则、日期、null)一律返回 "object"。
常见误判场景:
typeof null === "object"—— 这是历史 bug,至今未修复typeof [] === "object",typeof new Date() === "object",无法区分具体构造来源typeof async function(){} === "function",但typeof Promise.resolve() === "object"
所以别用 typeof 判断数组或正则——它帮不上忙。
instanceof 用于检测对象是否由某构造函数“实例化”而来
instanceof 检查的是对象的原型链上是否存在指定构造函数的 prototype。它只适用于引用类型,对原始值(如 "abc"、42)始终返回 false。
典型使用方式:
const arr = [1, 2, 3];
arr instanceof Array; // true
arr instanceof Object; // true(因为 Array.prototype.__proto__ === Object.prototype)
const re = /test/;
re instanceof RegExp; // true
const str = "hello";
str instanceof String; // false(这是原始字符串,不是 String 实例)
new String("hello") instanceof String; // true
注意点:
- 跨 iframe 或跨上下文时,
instanceof会失效(比如 iframe 里的[] instanceof Array在父页面为false,因构造函数不共享) - 不能用于检测原始类型,也不适合判断
null或undefined - ES6 class 也支持:
class A {}; new A() instanceof A === true
实际项目中怎么安全判断变量类型?
单靠 typeof 或 instanceof 都不够。推荐组合策略:
- 先用
typeof快速分流原始类型:typeof x === "string"、typeof x === "function" - 对
"object"类型,再用Object.prototype.toString.call(x)获取精确标签 - 需要确认是否为某类实例且环境可控(同上下文),才用
instanceof
例如判断数组:
function isArray(x) {
return Array.isArray(x); // 最优解,ES5+ 原生支持
}
// 或退化写法(兼容极老环境):
function isArray(x) {
return Object.prototype.toString.call(x) === "[object Array]";
}
判断 Promise:
function isPromise(x) {
return x !== null && typeof x === "object" && typeof x.then === "function";
}
// 注意:不能用 instanceof Promise,因可能跨 realm;也不能只靠 typeof,因普通对象也可能有 then 方法
真正容易被忽略的是:类型判断逻辑一旦进入工具函数或公共库,就必须考虑跨环境、可序列化、不可篡改原型等边界情况。Object.prototype.toString.call() 是目前最稳定可靠的“类型签名”获取方式,比任何单一操作符都更值得依赖。
以上就是《JS如何判断变量类型?typeof与instanceof详解》的详细内容,更多关于的资料请关注golang学习网公众号!
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
254 收藏
-
314 收藏
-
389 收藏
-
391 收藏
-
191 收藏
-
487 收藏
-
158 收藏
-
132 收藏
-
486 收藏
-
455 收藏
-
227 收藏
-
499 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习