当前位置: 首页 > news >正文

typeof和instanceof区别

typeofinstanceof 是 JavaScript 中用于类型检查的两个运算符,但它们的用途和工作方式有所不同。以下是它们的详细解释和区别:

typeof

  • 用途typeof 运算符用于返回一个表示数据类型的字符串。
  • 语法typeof operand
  • 返回值:返回值是一个字符串,表示操作数的类型。
示例:
console.log(typeof "Hello"); // "string"
console.log(typeof 42);      // "number"
console.log(typeof true);    // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null);     // "object" (这是一个历史遗留问题)
console.log(typeof Symbol());  // "symbol"
console.log(typeof {});       // "object"
console.log(typeof []);       // "object" (数组也是对象)
console.log(typeof function(){}); // "function"

instanceof

  • 用途instanceof 运算符用于检查一个对象是否是某个构造函数的实例。
  • 语法object instanceof constructor
  • 返回值:返回一个布尔值,表示对象是否是构造函数的实例。
示例:
function Person(name) {this.name = name;
}const john = new Person("John");console.log(john instanceof Person); // true
console.log(john instanceof Object);  // true
console.log(john instanceof Array);   // falseconst arr = [];
console.log(arr instanceof Array);    // true
console.log(arr instanceof Object);    // true

主要区别

  1. 用途

    • typeof 用于获取变量的基本数据类型。
    • instanceof 用于检查对象的构造函数类型。
  2. 返回值

    • typeof 返回一个字符串,表示数据类型。
    • instanceof 返回一个布尔值,表示对象是否是某个构造函数的实例。
  3. 适用范围

    • typeof 可以用于所有数据类型,但对于对象(如数组和 null)会返回 “object”。
    • instanceof 主要用于对象,能够区分不同的对象类型(如数组、日期等)。

例子对比

const num = 42;
console.log(typeof num); // "number"
console.log(num instanceof Number); // false (因为 num 是原始类型)const obj = new Number(42);
console.log(typeof obj); // "object"
console.log(obj instanceof Number); // true (因为 obj 是 Number 对象的实例)

总结

  • 使用 typeof 来检查基本数据类型。
  • 使用 instanceof 来检查对象的构造函数类型。

这两者结合使用可以帮助开发者更好地理解和处理 JavaScript 中的类型。

http://www.dtcms.com/a/314473.html

相关文章:

  • 静电干扰误报率↓85%!陌讯多模态融合算法在智慧环卫检测优化
  • python基础:数据解析BeatuifulSoup,不需要考虑前端形式的一种获取元素的方法
  • 【前端】JavaScript基础知识及基本应用
  • 【AMD】编译llama.cpp实践版
  • 管家级教程:在 Windows 上配置 WSL2、CUDA 及 VLLM,开源音频克隆项目
  • 解决 Alpine 容器中编译 confluent-kafka-go 报错的问题
  • LLaMA-Factory微调教程4:模型评估
  • Spring Boot + ShardingSphere 分库分表实战
  • 【CVPR2025】计算机视觉|AnomalyNCD:让工业异常分类“脱胎换骨”!
  • 计算机视觉(2)车规摄像头标准
  • YOLO11涨点优化:原创自研DSAM注意力!基于BiLevelRoutingAttention的颠覆性升级
  • nodejs 封装方法将打印日志输出到指定文件
  • javacc实现简单SQL解析器
  • Llama 3词汇表揭秘:128,000个token解析:merges 是子词分词算法
  • 数据结构——单向链表部分操作及valgrind安装
  • Exporters | 安装mongodb_exporter
  • 数据分页异步后台导出excel
  • 【Ubuntu】请问,`ip -a`显示的“wlo1”是什么呀?
  • 笔试——Day28
  • 如何在 Ubuntu 24.04 上安装和配置 TFTP 服务器
  • 高防服务器租用的作用都有哪些?
  • 上海交通大学联合项目论文解读 | Hume 模型:视觉 - 语言 - 动作模型中引入系统2思维
  • 单片机51 day46
  • 部署 Kibana 8.2.2 可视化管理 Elasticsearch 8.2.2 集群
  • 【测试工程思考】测试自动化基础能力建设
  • 机试备考笔记 4/31
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(下)【make/Makefile】
  • 笛卡尔坐标
  • 机器学习笔记:集成学习/模型融合
  • usr/bin/ld链接报错undefined reference `av_frame_free(AVFrame**)‘等ffmpeg库报错