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

相关推荐
江拥羡橙4 小时前
Vue和React怎么选?全面比对
前端·vue.js·react.js
楼田莉子6 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
暮之沧蓝6 小时前
Vue总结
前端·javascript·vue.js
木易 士心6 小时前
Promise深度解析:前端异步编程的核心
前端·javascript
im_AMBER6 小时前
Web 开发 21
前端·学习
又是忙碌的一天6 小时前
前端学习day01
前端·学习·html
Joker Zxc6 小时前
【前端基础】20、CSS属性——transform、translate、transition
前端·css
excel6 小时前
深入解析 Vue 3 源码:computed 的底层实现原理
前端·javascript·vue.js
大前端helloworld7 小时前
前端梳理体系从常问问题去完善-框架篇(react生态)
前端
不会算法的小灰7 小时前
HTML简单入门—— 基础标签与路径解析
前端·算法·html