前言
今天面试的时候谈到了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,这两个基本数据类型怎么还来捣乱! 但是在我考察研究之后发现,原来如此。
- 首先先来说一下NaN他的typeof返回类型为什么是number;首先NaN他的全写就是not a number,他代表的基本是0/0的这些值。但是!神奇的它竟然能够进行相关运算,比如NaN + 1 吧,你可能会认为他报错,但是其实它的返回值是NaN,正因为如此,把它划定到number中不过分。
- 接着再来说一下null的返回类型为什么是object,简单来说,
typeof null的结果为Object的原因是一个bug。在javascript的最初版本中,使用的32位系统,js为了性能优化,使用低位来存储变量的类型信息。而判断数据类型是通过机器码低位标识来进行判断的,null的机器码全部为0,对象的机器码低位标识为000,所以出现了误判。 - 那么为什么关于Date返回的类型是function呢,首先是因为Date他不是一个简单的对象,他是一个函数对象,所以返回function。
关于我的一些理解就到这里,希望给大家加固一下知识点吧,感谢