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

相关推荐
Mr_Mao4 小时前
Naive Ultra:中后台 Naive UI 增强组件库
前端
前端小趴菜055 小时前
React-React.memo-props比较机制
前端·javascript·react.js
摸鱼仙人~6 小时前
styled-components:现代React样式解决方案
前端·react.js·前端框架
sasaraku.7 小时前
serviceWorker缓存资源
前端
RadiumAg8 小时前
记一道有趣的面试题
前端·javascript
yangzhi_emo8 小时前
ES6笔记2
开发语言·前端·javascript
yanlele8 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
中微子9 小时前
React状态管理最佳实践
前端
烛阴9 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
中微子10 小时前
JavaScript 事件与 React 合成事件完全指南:从入门到精通
前端