面试官又来问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 用于检测对象的具体实例类型。

相关推荐
林希_Rachel_傻希希1 分钟前
学React治好了我的焦虑症,1小时速通React 前20分钟。
前端·javascript·面试
Cache技术分享6 分钟前
435. Java 日期时间 API - Clock 灵活获取当前时间
前端·后端
独泪了无痕1 小时前
Vue3中防御XSS攻击的“特效药”-DOMPurify
前端·vue.js·安全
小小19922 小时前
idea 配置less转化为css
前端·css·less
hhb_6182 小时前
Less嵌套避坑:优先级冲突实战解析
前端·css·less
云水一下2 小时前
Vue.js从零到精通系列(五):全局状态管理——Pinia 核心与实践
前端·javascript·vue.js
我不是外星人2 小时前
浅谈我对 AI 发展的看法
前端·ai编程·claude
甲维斯3 小时前
测一波Kimi K2.7,消耗一周配额!
前端·人工智能·游戏开发
Dick5073 小时前
ROS2 多机器人通用 Driver 层复盘:BaseRobotDriver 到多平台 Mock 切换实现
前端·javascript·机器人
xiaofeichaichai3 小时前
前端安全 XSS 与 CSRF
前端·安全·xss