新闻中心
J*aScript instanceof如何工作_它检查什么?
instanceof 检查对象原型链是否包含构造函数的 prototype 对象,基于引用相等向上查找 [[Prototype]],不依赖 constructor 属性;原始值返回 false,null 无原型链,undefined 右侧非函数则报错;可由 Symbol.hasInstance 自定义行为。

instanceof 检查的是对象的原型链上是否包含构造函数的 prototype 对象。
它不检查构造函数本身,也不检查对象的 constructor 属性
很多人误以为 instanceof 是看 obj.constructor === Ctor,其实不是。constructor 可以被随意修改,完全不可靠。instanceof 的判断依据只有一条:沿着 obj 的 __proto__(即内部 [[Prototype]])一路向上查找,看能不能找到 Ctor.prototype 这个对象。
- 如果找到了,返回
true - 如果查到原型链尽头(null)都没找到,返回
false - 要求右边必须是函数(否则抛错),左边可以是任意值(非对象会直接返回 false)
原型链查找是基于引用相等,不是值相等
instanceof 不关心 Ctor.prototype 上有什么属性或方法,只关心“是不是同一个对象”。哪怕两个函数有完全一样的 prototype 内容,只要不是同一个对象实例,就不会匹配。
例如:
美图AI开放平台
美图推出的AI人脸图像处理平台
11
1
查看详情
function A() {}
function B() {}
B.prototype = Object.create(A.prototype); // 继承 A
const b = new B();
console.log(b instanceof A); // true —— 因为 B.prototype.__proto__ === A.prototype
console.log(b instanceof B); // true —— 因为 b.__proto__ === B.prototype
注意 null、undefined 和原始值的行为
原始值(如字符串、数字、布尔)用 instanceof 总是返回 false,因为它们不是对象,没有原型链:
-
"hello" instanceof String→false -
new String("hello") instanceof String→true -
null instanceof Object→false(null 没有原型链) -
undefined instanceof Object→ 报错(右侧必须是函数)
ES6 之后可自定义 Symbol.hasInstance
如果构造函数上定义了静态方法 [Symbol.hasInstance](obj),instanceof 就会调用它,而不是走默认原型链查找。这是少数能覆盖默认行为的方式。
class MyArray {
static [Symbol.hasInstance](obj) {
return Array.isArray(obj) || (obj && typeof obj.length === 'number');
}
}
console.log([1,2] instanceof MyArray); // true
console.log({length: 5} instanceof MyArray); // true
基本上就这些。instanceof 的核心就是原型链上的引用查找,简单但容易忽略细节。以上就是J*aScript instanceof如何工作_它检查什么?的详细内容,更多请关注其它相关文章!
# 有何不同
# seo中国女
# 搞网站建设赚钱不
# 沈阳seo营销怎么操作
# 街道建设画册模板下载网站
# 五粮液再推广营销
# 鲜牛奶推广营销策划方案
# 海南seo招商加盟
# 杭州网站建设服务网站
# 鞋网站推广好吗
# 雄安网站建设单位
# 器中
# javascript
# 这是
# 拖拽
# 的是
# 服务端
# 表单
# 报错
# 自定义
# 美图
# java
# es6
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧
离线运行Go语言之旅:本地部署与GOPATH配置指南
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
Go语言中动态执行代码字符串的策略与实践
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
Win11怎么查看电脑配置_Win11硬件配置检测工具使用
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
在VS Code中配置和运行Dart程序的完整步骤
UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】
小红书网页版入口链接分享 小红书官网直接进
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
邮政快递单号查询入口 邮政快递物流信息在线查询入口
Bing引擎入口最新2025 Bing搜索免费官方登录
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
谷歌google账号注册详细步骤 谷歌账号注册官方教程
J*a中实现Go语言select通道多路复用机制
Flexbox布局实践:实现粘性导航栏与底部固定页脚
J*a递归快速排序中静态变量的状态管理与陷阱
理解Python模块与全局变量的作用域管理
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南
自定义Bag-of-Words实现:处理带负号的词汇权重
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
58动漫网在线官方网 58动漫网正版动漫入口网址
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
c++如何使用Meson构建系统_c++比CMake更快的构建工具
Pandas DataFrame 多条件优先级排序与排名
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
深入理解Go语言中的指针类型:以*string为例
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
C++如何比较两个字符串_C++ string compare函数与操作符对比
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
深入理解与实现最大堆的Heapify过程:常见错误与修正
Python实现多节点属性重叠度分析教程
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
J*aScript数组对象转换:按指定键分组与值收集
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
b站赚钱渠道_b站收益来源
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南


2025-12-14
浏览次数:次
返回列表