javascript如何检测数据类型_typeof和instanceof有何区别【教程】
发布时间 - 2026-01-28 00:00:00 点击率:次typeof 对 null 返回 "object"(历史 bug),对数组、普通对象、正则、日期等均返回 "object",仅对函数返回 "function";instanceof 依赖原型链,跨 iframe 失效且无法检测原始值。
typeof 适合快速判断基本类型,但对 null 和对象(包括数组、正则、日期等)一律返回 "object";instanceof 可识别引用类型的构造器来源,但依赖原型链,跨 iframe 失效。
typeof 对哪些值返回意外结果?
它在几个关键地方“不准”:
-
typeof null返回"object"(历史 bug,已成标准) -
typeof []、typeof {}、typeof /reg/、typeof new Date()全是"object" -
typeof function() {}返回"function"(这是特例,不是标准对象) -
typeof Symbol()返回"symbol",typeof BigInt(1)返回"bigint"(ES6+ 新增,表现正常)
instanceof 的原理和典型失效场景
它本质是检查 left.__proto__ 是否沿原型链能找到 right.prototype。因此:
- 能正确区分
[] instanceof Array(true)、{} instanceof Object(true)、/a/ instanceof RegExp(true) - 但
let iframe = document.createElement('iframe'); document.body.appendChild(iframe); let arr = iframe.contentWindow.Array; [] instanceof arr返回false(不同全局环境,原型链断裂) - 无法检测原始值:
123 instanceof Number是false(数字字面量不是实例)
更可靠的类型检测方案(推荐组合)
单靠一个操作符不够,常用补救方式:
- 判空先用
value === null,再用typeof value === "object"避开null陷阱 - 检测数组优先用
Array.isArray(value)(最准,ES5+ 支持) - 检测内置对象统一走
Object.prototype.toString.call(value):
Object.prototype.toString.call([]) // "[object Array]"
Object.prototype.toStrin
g.call(/a/) // "[object RegExp]"
Object.prototype.toString.call(null) // "[object Null]" - 自定义类可用
instanceof,但注意避免跨上下文使用
真正难的不是记住区别,而是意识到:JavaScript 没有“类型系统”的强契约,所有检测都是基于运行时结构的推测——所以别依赖单一手段,尤其在处理第三方数据或跨环境对象时。
# javascript
# es6
# java
# app
# win
# 区别
# 数据类型
# Array
# Object
# NULL
# date
# 引用类型
# number
# symbol
# function
# regexp
# 对象
# typeof
# prototype
# bug
# iframe
# 都是
# 这是
# 几个
# 意识到
# 自定义
# 已成
# 能找到
# 再用
# 它在
# 但对
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何创建自定义Facades?(详细步骤)
如何用已有域名快速搭建网站?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel如何优化应用性能?(缓存和优化命令)
七夕网站制作视频,七夕大促活动怎么报名?
如何在阿里云通过域名搭建网站?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
linux写shell需要注意的问题(必看)
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
如何用AWS免费套餐快速搭建高效网站?
Laravel怎么为数据库表字段添加索引以优化查询
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
大学网站设计制作软件有哪些,如何将网站制作成自己app?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
JS去除重复并统计数量的实现方法
如何将凡科建站内容保存为本地文件?
非常酷的网站设计制作软件,酷培ai教育官方网站?
js实现点击每个li节点,都弹出其文本值及修改
开心动漫网站制作软件下载,十分开心动画为何停播?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何在香港免费服务器上快速搭建网站?
如何在服务器上三步完成建站并提升流量?
如何挑选最适合建站的高性能VPS主机?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何快速生成凡客建站的专业级图册?
JS弹性运动实现方法分析
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何快速搭建虚拟主机网站?新手必看指南
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Mybatis 中的insertOrUpdate操作
如何用PHP快速搭建高效网站?分步指南
如何打造高效商业网站?建站目的决定转化率
jQuery中的100个技巧汇总
Bootstrap CSS布局之列表
教学论文网站制作软件有哪些,写论文用什么软件
?
如何快速生成ASP一键建站模板并优化安全性?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
JavaScript数据类型有哪些_如何准确判断一个变量的类型
大连网站制作公司哪家好一点,大连买房网站哪个好?
MySQL查询结果复制到新表的方法(更新、插入)
轻松掌握MySQL函数中的last_insert_id()
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】


