关于typeof|青训营笔记

85 阅读2分钟

前言

今天面试的时候谈到了typeof,因为太久没用加上自己对原理不是很懂,有些记混了。今天再来熟悉一下相关的知识点。

出题以及答案

先列出一些题目,大家伙来看一下,最好也能够说出相应的解释,为什么最终的结果是它:

  • typeof(NaN)                //number
    
  • typeof(undefined)          //undefined
    
  • typeof(null)               //object
    
  • typeof(Symbol)             //function
    
  • typeof(BigInt)             //function
    
  • typeof(object)             //object
    
  • typeof(Array)              //object 
    
  • typeof(Date)               //function
    
  • typeof(function)           //function
    

不知道各位仁兄是否说出了正确答案并且有了自己的理由

解答

令我最疑惑的就是NaN还有null,这两个基本数据类型怎么还来捣乱! 但是在我考察研究之后发现,原来如此。

  1. 首先先来说一下NaN他的typeof返回类型为什么是number;首先NaN他的全写就是not a number,他代表的基本是0/0的这些值。但是!神奇的它竟然能够进行相关运算,比如NaN + 1 吧,你可能会认为他报错,但是其实它的返回值是NaN,正因为如此,把它划定到number中不过分。
  2. 接着再来说一下null的返回类型为什么是object,简单来说,typeof null的结果为Object的原因是一个bug。在 javascript 的最初版本中,使用的 32位系统,js为了性能优化,使用低位来存储变量的类型信息。而判断数据类型是通过机器码低位标识来进行判断的,null的机器码全部为 0,对象的机器码低位标识为000,所以出现了误判。
  3. 那么为什么关于Date返回的类型是function呢,首先是因为Date他不是一个简单的对象,他是一个函数对象,所以返回function。

关于我的一些理解就到这里,希望给大家加固一下知识点吧,感谢