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

相关推荐
旷野本野7 分钟前
【HTML-CSS】
前端·css·html
Jolyne_14 分钟前
css实现圆柱体
前端·css·react.js
亦黑迷失21 分钟前
canvas + ts 实现将图片一分为二的功能,并打包发布至 npm
前端·typescript·canvas
....49226 分钟前
antvX6自定义 HTML 节点创建与更新教程
前端·html·antvx6
禹曦a28 分钟前
Web开发:常用 HTML 表单标签介绍
前端·html·web
姑苏洛言1 小时前
如何让用户回到上次阅读的位置?——前端视角下的用户体验优化实践
前端
kovlistudio1 小时前
红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn
开发语言·前端·javascript·学习·npm·node.js
我爱吃干果1 小时前
ZoomCharts使用方法
前端·javascript·笔记·zoom
旧厂街小江1 小时前
LeetCode 第111题:二叉树的最小深度
前端·算法·程序员
&白帝&1 小时前
vue实现大转盘抽奖
前端·javascript·vue.js