面试官又来问typeof 与 instanceof 区别了

typeof

概念:typeof 运算符返回一个字符串,表示操作数的类型。

用法:

js 复制代码
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'

typeof 的结果可以看下图:

这个图中可以看出, null比较出乎意料,并且typeof区分不了对象和null

typeof null 为什么返回object

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 "object"。

instanceof

概念:instanceof 运算符 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 返回的是bool。

如果你了解原型和原型链的情况下,这个概念还是很好理解的。

用法:

js 复制代码
// 定义构建函数
let Car = function() {}
let benz = new Car()
benz instanceof Car // true
let car = new String('xxx')
car instanceof String // true
let str = 'xxx'
str instanceof String // false

在面试的过程中,极有可能会被问到 instanceof如何实现?

javascript 复制代码
function myInstanceof(left, right) {
    // 如果是基础类型,直接返回false
    if(typeof left !== 'object' || left === null) return false;
    // getProtypeOf能够拿到left的原型对象
    let proto = Object.getPrototypeOf(left);
    //循环遍历原型链,直到找到相同原型对象,返回true
    while(true) {                  
        if(proto === null) return false;
        if(proto === right.prototype) return true;
        proto = Object.getPrototypeof(proto);
    }
}

话术总结

typeof和instanceof都是用于检测数据类型的操作符。

  • typeof 返回一个字符串,表示操作数的基本数据类型(如 "number"、"string"、"object"),但对 null 和数组返回 "object",对函数返回 "function",无法区分具体对象类型。
  • instanceof 通过原型链检查对象是否属于某个构造函数的实例(如 arr instanceof Array 返回 true),适用于检测引用类型(如数组、自定义对象),但无法检测基本类型(如 1 instanceof Number 返回 false)。

简言之,typeof 适合判断基本类型(除 null 外),而 instanceof 用于检测对象的具体实例类型。

相关推荐
Csvn7 分钟前
构建工具
前端
FRing0337 分钟前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
kyriewen3 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒3 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫4 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus4 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬5 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao5 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js6 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
螺丝钉tina7 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript