instanceof和typeof的区别【JavaScript常见面试题】

typeof (一元操作符):

用于判断一个变量的类型。它可以用于任何数据类型,并返回一个表示该类型的字符串。

console.log(typeof 42);         // "number"
console.log(typeof 'Hello');    // "string"
console.log(typeof true);       // "boolean"
console.log(typeof undefined);  // "undefined"
console.log(typeof null);       // "object" (这是一个历史遗留的bug)
console.log(typeof { a: 1 });   // "object"
console.log(typeof [1, 2, 3]);  // "object" (数组在JavaScript中也是对象)
console.log(typeof function(){}); // "function"
  1. 数字类型:typeof 返回的值是 number。
  2. 字符串类型:typeof 返回的值是 string。
  3. 布尔类型:typeof 返回的值是 boolean。
  4. 对象、数组、null 返回的值是 object:如 typeof(window),typeof(document),typeof(null)
  5. 函数类型,返回的值是 function:如:typeof(eval),typeof(Date)返回的值都是 function。
  6. 不存在的变量、函数或者 undefined,将返回 undefined:比如:typeof(abc)、typeof(undefined)
    都返回 undefined

instanceof (二元操作符):

用于检测某个对象是否是另一个对象的实例,或者说某个对象是否存在于另一个对象的原型链上。

class Animal {}
class Dog extends Animal {}

const dog = new Dog();

console.log(dog instanceof Dog);    // true
console.log(dog instanceof Animal); // true
console.log(dog instanceof Object); // true (所有对象都是Object的实例)

console.log([] instanceof Array);   // true
console.log({} instanceof Object);  // true
  1. instanceof 用于检测对象类型,不适用于基本数据类型(会报错)。
  2. 通过原型链来判断,如果对象的原型链上包含某个构造函数的 prototype 属性,则返回 true。
  3. 可以用于区分对象和数组,因为 Array 是一个构造函数,而 [] instanceof Array 返回 true。

instanceof 和 typeof 进行类型判断的对比示例:

示例 1:基本数据类型:

let num = 42;
console.log(typeof num); // "number"
// console.log(num instanceof Number); // 错误,基本数据类型不能用instanceof

let str = "Hello";
console.log(typeof str); // "string"
// console.log(str instanceof String); // 错误,基本数据类型不能用instanceof

let bool = true;
console.log(typeof bool); // "boolean"
// console.log(bool instanceof Boolean); // 错误,基本数据类型不能用instanceof

typeof 可以正确地判断基本数据类型(number、string、boolean),而 instanceof 不适用于基本数据类型,尝试使用会导致错误。

示例 2:对象和数组:

let obj = { a: 1 };
console.log(typeof obj); // "object"
console.log(obj instanceof Object); // true

let arr = [1, 2, 3];
console.log(typeof arr); // "object" (数组在JavaScript中也是对象)
console.log(arr instanceof Array); // true

在这个示例中,typeof 对于对象和数组都返回 “object”,无法区分它们。而 instanceof 可以准确地判断 obj 是 Object 的实例,arr 是 Array 的实例。

示例 3:函数:

function myFunc() {}
let func = myFunc;

console.log(typeof func); // "function"
// console.log(func instanceof Function); // 在某些环境中可能返回true,但这不是标准用法

对于函数类型,typeof 可以准确地返回 “function”。而 instanceof 对于函数类型的判断并不是标准用法,虽然在某些JavaScript环境中 func instanceof Function 可能会返回 true,但这并不是普遍推荐的做法。

示例 4:自定义类和实例:

class Person {}
let person = new Person();

console.log(typeof person); // "object"
console.log(person instanceof Person); // true
console.log(person instanceof Object); // true (因为所有类都继承自Object)

在这个示例中,typeof 对于自定义类的实例只能返回 “object”,而 instanceof 可以准确地判断 person 是 Person 类的实例,同时也是 Object 的实例(因为所有类都隐式继承自 Object)。

总结:

  • typeof 适用于判断基本数据类型和函数类型。
  • instanceof 适用于判断对象类型,包括自定义类和内置构造函数创建的实例。
  • 当需要区分对象和数组时,应使用 instanceof。
  • 对于基本数据类型,只能使用 typeof,不能使用 instanceof。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek-R1:通过强化学习激励大语言模型的推理能力

摘要 本文介绍了我们的第一代推理模型,DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是通过大规 模强化学习(RL)训练的模型,在没有使用监督微调(SFT)这个前置步骤的情况下,展示了卓越的推…

springboot004网页时装购物系统(源码+数据库+文档)

源码地址:网页时装购物系统 文章目录 1.项目简介2.部分数据库结构与测试用例3.系统功能结构4.包含的文件列表(含论文)前台运行截图后台运行截图 1.项目简介 ​ 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的…

C++ Primer 容器适配器

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

git上传gitee仓库---简单方便

安装完git以后 在资源管理器中右键: 选择Open Git Bash here 接着gitclone,从gitee上面复制链接: https://gitee.com/hekai666/python-deeplearning.git 粘贴过来: 回车: 然后在本地就会多出来一个文件: 打开文件夹以…

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…

浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。

关闭JavaScript 源代码映射,F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的,但这个办法可以暂时解决问题,点完这个东西就隐藏了webpack,有懂的来讲讲。 又浪费一个小时…

C++ 编程语言简介

C 是一种通用编程语言,它是作为 C 语言的增强而开发的,以包含面向对象的范例。它是一种命令式和编译语言。 C 是一种高级的通用编程语言,专为系统和应用程序编程而设计。它由贝尔实验室的 Bjarne Stroustrup 于 1983 年开发,作为…

山东大学软件学院nosql实验三

实验题目: 用Java做简单查询(2学时) 实验内容 用API方式,做简单查询。 实验要求 在以下要求中选择至少2个,使用Java语言实现数据查询,最终把数据输出到前端界面。 (1)找出年龄小于20岁的所有学生 &…

【NLP 38、激活函数 ④ GELU激活函数】

别盲目,别着急,慢慢走,没事的 —— 25.2.24 一、定义与数学表达式 GELU(Gaussian Error Linear Unit,高斯误差线性单元)是一种结合概率分布的非线性激活函数,其核心思想是通过输入值服从标准正…

突破性能极限:DeepSeek开源FlashMLA解码内核技术解析

引言:大模型时代的推理加速革命 在生成式AI大行其道的今天,如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800 GPU上实现580 TFLOPS计算性能,这正是大模型推理优化的…

touchgfx的工作机制

touchgfx的工作机制 一.MVP软件架构 MVP的全称为Model-View-Presenter Model: 就是数据部分,在整个touchgfx应用中,只有一个Model类实例对象,它为所有的Screen屏幕界面服务,可以理解成是一个全局变量区,同时它还负责和后端系统通信 View: 就是UI界面部分,对应于View类,在整…

网站搭建wp

前置准备工作 需要下载Git,note.js,在官网上可以搜索并安装 搭建过程 这里借助hexo工具 1. 本地博客搭建 首先创建本地文件夹,并在该文件夹里面创建一个叫做hexo的文件夹在该文件夹中选择Git Bash 进入hexo官网将五条指令用bash运行运行…

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能,每个人都可以通过手机实时拍照上传到大屏幕上,同时还可以发布留言内容,屏幕上会同步滚动播放展示所有人的照片和留言。相比校传统的照片直播功能更加灵活方便,而…

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器(主服务器,Master)复制到一个或多个 MySQL 数据库服务器(从服务器,Slave)的技术。以下简述其原理,主要包含三个核…

【蓝桥杯单片机】第十三届省赛第二场

一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器 关闭锁存…

Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(3)

Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(3) Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(1)-CSDN博客文章浏览阅读667次,点赞18次&…

MariaDB 历史版本下载地址 —— 筑梦之路

MariaDB 官方yum源里面只有目前在维护的版本,而有时候对于老项目来说还是需要老版本的rpm包,国内很多镜像站都是同步的官方仓库,因此下载老版本也不好找,这里主要记录下从哪里可以下载到历史版本的MariaDB rpm包。 1. 官方归档网…

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中&#xff0…

20250212:https通信

1:防止DNS劫持:使用 https 进行通信。 因为是SDK授权开发,需要尽量压缩so库文件和三方依赖。所以第一想法是使用 head only 的 cpp-httplib 进行开发。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已经在开发使用的是1.0.2a版本,不满足需求。 方案1:升级OpenSSL 将Op…

数据驱动未来!天合光能与永洪科技携手开启数字化新篇章

在信息化时代的今天,企业间的竞争早就超越了传统产品与服务的范畴,新的核心竞争力即——数据处理能力和信息技术的应用。作为数据技术领域的领军者,永洪科技凭借其深厚的技术积累和丰富的行业经验,成功助力天合光能实现数字化升级…