当前位置:网站首页 > 技术博客 > 正文

typeof和instance of



虽然typeof和instanceof是JavaScript中的基础知识,但这个知识点却有很多的小细节,所以导致有很多人被面试官问道这个问题时表现并不尽如人意。

js中有7种数据类型,其中有6种基本数据类型:

  1. (在中加入了第7种原始类型,现已被最新支持) 其中Symbol是ES6新增的,还有一种复杂类型(引用类型)Object。 我们常用typeof和instanceof操作符来判断数据类型

 是一个一元操作符不是函数,所以不需要传递参数,使用方法非常简单:,使用typeof会直接返回类型结果

 
  

我们可以轻松的用判断数据类型,但是虚线下面的判断结构好像有点怪。这就涉及到了typeof实现原理的问题

让我们先来聊聊的实现原理吧

js 在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息

  • 000:对象
  • 010:浮点数
  • 100:字符串
  • 110:布尔
  • 1:整数

但是 和 这两个值却比较特殊

  1. :所有机器码均为0
  2. :用 −2^30 整数来表示

这里我们先不管,现在你们知道为什么判断是对象了吗,因为的机器码全是0,所以被当成了。这个bug存在了将近20多年,也许永远也不会修复,因为这牵涉到太多的web系统,修复它会产生更多的bug,令许多系统无法正常工作。

判断函数返回结果就是函数,这其实还好理解,函数也是对象,因为函数比较重要,有自己特殊的属性,所以我们用判断函数时会区分与对象,单独显示。

但是万一我们要判断这个实例属于哪个对象,那显然这时已经失去作用了,因为除了函数,它都会判断为对象,这时我们就需要用到了

中文翻译为实例,因此的含义就不言而喻,判断该对象是谁的实例,同时我们也就知道是对象运算符。

的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式()返回值为true;否则返回false。下面代码说明了instanceof的使用方法

 
  

手写instanceof代码的实现原理也是面试的考察点,instanceof核心实现如下,我们自己封装了一个具有instanceof功能的函数。

 
  

typeof与instanceof都是判断数据类型的方法,区别如下:

  1. typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
  2. instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
  3. 而typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了function 类型以外,其他的也无法判断

本文章已收录JavaScript技术详解,更多JavaScript技术可查看专栏。 ❤码字不易点个免费的赞吧❤

  • 上一篇: delphi还在更新吗
  • 下一篇: 算法相关书籍
  • 版权声明


    相关文章:

  • delphi还在更新吗2025-07-23 15:30:03
  • Linux杀毒软件2025-07-23 15:30:03
  • 串口调试工具发送modbus指令2025-07-23 15:30:03
  • libcurl multi2025-07-23 15:30:03
  • PyCharm的版本有哪些2025-07-23 15:30:03
  • 算法相关书籍2025-07-23 15:30:03
  • js注释有什么作用2025-07-23 15:30:03
  • sql join默认是什么连接2025-07-23 15:30:03
  • cpu性能测试工具2025-07-23 15:30:03
  • 卷积神经网络resnet2025-07-23 15:30:03