instanceof介绍及手写instanceof

instanceof 是 JavaScript 中的一个操作符,用于检测一个对象是否在其原型链上有构造函数 prototype 属性。换句话说,instanceof 用来判断一个变量是否是一个特定构造函数的实例。

当你使用 instanceof 操作符时,它会检查左边操作数的原型链中是否包含右边操作数的 prototype 属性。如果是,则返回 true;否则返回 false

语法

object instanceof constructor
  • object:要检测的对象。
  • constructor:函数或者类,其 prototype 属性将被用作原型链中的一部分进行查找。

示例

function Car(make, model) {  this.make = make;  this.model = model;  
}  const myCar = new Car("Ford", "Mustang");  console.log(myCar instanceof Car); // true,因为 myCar 是 Car 的实例  
console.log(myCar instanceof Object); // true,因为所有对象都是 Object 的实例(或其子类的实例)  // 内置对象类型检测  
console.log([] instanceof Array); // true  
console.log({} instanceof Object); // true  
console.log(new Date() instanceof Date); // true  // 注意:基本类型(如 string, number, boolean)不是对象,所以 instanceof 不会返回 true  
console.log("Hello" instanceof String); // false  
console.log(42 instanceof Number); // false  
console.log(true instanceof Boolean); // false  
console.log(null instanceof Object); // false  
console.log(undefined instanceof Object); // false // 但是,如果你使用了基本类型的包装对象,情况就不同了  
console.log(new String("Hello") instanceof String); // true

注意事项

  • instanceof 操作符对于基本数据类型(如 NumberStringBoolean)和 nullundefined 不适用,因为基本数据类型不是对象,而 null 和 undefined 也没有原型链。

手写instanceof

function myInstanceOf(obj, constructor) {// 首先检查 obj 是否为 null 或 undefined,因为这两种类型没有原型链 if (!obj || typeof obj !== 'object') {return false}// 获取 obj 的原型let proto = Object.getPrototypeOf(obj)while (proto) {// 如果原型等于构造函数的原型,则返回 trueif (proto === constructor.prototype) {return true}proto = Object.getPrototypeOf(proto)}return false
}// 示例  
function Car(make, model) {this.make = make;this.model = model;
}const myCar = new Car('Ford', 'Mustang');console.log(myInstanceOf(myCar, Car)); // true  
console.log(myInstanceOf(myCar, Object)); // true  
console.log(myInstanceOf(null, Object)); // false  
console.log(myInstanceOf(undefined, Object)); // false  
console.log(myInstanceOf(5, Number)); // false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++中的斐波那契数列(Fibonacci Sequence)和背包问题(Knapsack Problem)

前言 hello,大家好啊,我是文宇,不是文字,是文宇哦。 斐波那契数列(Fibonacci Sequence) 斐波那契数列(Fibonacci Sequence)是一个经典的数学问题,其中每个数都是前两个…

24年第三届钉钉杯大学生大数据挑战赛浅析

需要完整资料,请关注WX:“小何数模”! 本次钉钉杯大数据挑战赛的赛题已正式出炉,无论是赛题难度还是认可度,该比赛都是仅次于数模国赛的独一档,可以用于国赛前的练手训练。考虑到大家解题实属不易&#xf…

气膜足球馆:经济高效的室内足球场馆解决方案—轻空间

如果你有一片足球场,想要建一个室内的足球馆,为什么不考虑一下气膜建筑呢?气膜建筑以其独特的优势和高性价比,成为现代体育场馆建设中的一匹黑马。它不仅具有传统建筑无法比拟的经济效益和快速施工优势,还在智能控制、…

vue实现电子签名、图片合成、及预览功能

业务功能:电子签名、图片合成、及预览功能 业务背景:需求说想要实现一个电子签名,然后需要提供一个预览的功能,可以查看签完名之后的完整效果。 需求探讨:后端大佬跟我说,文档我返回给你一个PDF的oss链接…

7.27扣...

知识点补充: 1.StringBuilder StringBuilder 类在 Java 中是一个可变字符序列。与 String 类不同,StringBuilder 可以在创建之后被修改。这意味着你可以向 StringBuilder 对象追加、插入或删除字符,而不需要创建新的对象(辅助数…

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域,确保每笔交易的安全与合规是至关重要的。而企业公户验证API,正是这样一位默默守护的数字卫士,它通过智能化的手段,简化了企业对公账户验证流程,让繁琐的审核变得快捷且可靠。 什么是企业公…

chrome浏览器驱动(所有版本)

chrome浏览器驱动 114之前版本 https://chromedriver.storage.googleapis.com/index.html 125以后 125以后版本下载链接在此,只有后面status是绿色对勾的才可以下载,驱动大版本一致就可以使用,不需版本号一模一样;下载所需版本只…

语言转文字

因为工作原因需要将语音转化为文字,经常搜索终于找到一个免费的好用工具,记录下使用方法 安装Whisper 搜索Colaboratory 右上方链接服务 执行 !pip install githttps://github.com/openai/whisper.git !sudo apt update && sudo apt install f…

在appium中,如何通过匹配图片来进行断言?

在Appium中进行图片匹配断言,可以使用OpenCV来实现。以下是使用Appium和OpenCV进行图片匹配断言的示例代码。 首先,需要确保安装了必要的库: pip install opencv-python-headless pip install opencv-python pip install numpy然后&#xf…

【区块链+绿色低碳】绿色电力分布式身份管理系统 | FISCO BCOS应用案例

目前,绿色电力场景在身份管理方面存在一些痛点,如:绿色电力交易场景中,主体地理位置分散,主体类型(人、机、 物)差异较大,主体身份认证和管理方式要求差异较大;在着力发展…

高性能 Java 本地缓存 Caffeine 框架介绍及在 SpringBoot 中的使用

在现代应用程序中,缓存是一种重要的性能优化技术,它可以显著减少数据访问延迟,降低服务器负载,提高系统的响应速度。特别是在高并发的场景下,合理地使用缓存能够有效提升系统的稳定性和效率。 Caffeine 是一个高性能的…

《程序猿入职必会(4) · Vue 完成 CURD 案例 》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

Eclipse的一些使用

出错的原因: eclipse中,当声明了变量,没有进行初始化,然后在方法中引用该变量的时候,就会报出如下错误: The local variable XXX may not have been initialized意思是该变量没有进行初始化,解决这个错误就…

【C++刷题】优选算法——队列+宽搜

N 叉树的层序遍历 vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;if (root nullptr) return ret;queue<Node*> q;q.push(root);ret.push_back({root->val});int size 1;while (!q.empty()) {vector<int> v…

【机器学习】Jupyter Notebook如何使用之基本步骤和进阶操作

引言 Jupyter Notebook 是一个交互式计算环境&#xff0c;它允许创建包含代码、文本和可视化内容的文档 文章目录 引言一、基本步骤1.1 启动 Jupyter Notebook1.2 使用 Jupyter Notebook 仪表板1.3 在笔记本中工作1.4 常用快捷键1.5 导出和分享笔记本 二、进阶用法2.1 组织笔…

CSS性能优化:从加载速度到渲染效率的全方位提升

在快节奏的互联网环境中&#xff0c;网页的加载速度和渲染效率直接关系到用户体验和搜索引擎排名。CSS作为网页样式的主要描述语言&#xff0c;其性能优化同样不容忽视。本文将介绍一系列CSS性能优化的策略&#xff0c;帮助开发者从加载速度到渲染效率实现全方位的提升。 1. 压…

从零开始学习网络安全渗透测试之基础入门篇——(二)Web架构前后端分离站Docker容器站OSS存储负载均衡CDN加速反向代理WAF防护

Web架构 Web架构是指构建和管理Web应用程序的方法和模式。随着技术的发展&#xff0c;Web架构也在不断演进。当前&#xff0c;最常用的Web架构包括以下几种&#xff1a; 单页面应用&#xff08;SPA&#xff09;&#xff1a; 特点&#xff1a;所有用户界面逻辑和数据处理都包含…

vscode container

附加到已有容器 终端进程“/sbin/nologin”启动失败(退出代码: 1)。 原因是因为默认vscode container 使用default 这个用户进行登陆。而这个default 是使用shell 的&#xff08;在/etc/passwd中配置&#xff09;。我们要修改vscode 行为&#xff0c;添加默认的bash 终端启动…

劝你不要上自动化立体库,非要上,砸锅了吧

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在当今这个科技日新月异的时代&#xff0c;自动化立体库作为仓储物流领域的佼佼者&#xff0c;以其高效、精准、节省人力的优势&#xff0c;吸引…

Windows下帆软BI(finebi)单机部署移植(Tomcat)攻略

一、基础环境 操作系统&#xff1a;Windows 10 64bit 帆软BI 版本&#xff1a;V9.0/V10.0 HTTP工具&#xff1a;Tomcat 外置数据库&#xff1a;Oracle 11g 实验内容&#xff1a;将已经部署好的帆软BI从一台电脑移植到另一台电脑 二、前期准备 1、做好外置数据库移植&…