前言
无意中刷到了一道有关 typeof
原理的大厂面试题,看到这道面试题的我,竟然毫无头绪。但是热爱学习的我并没有被这厮吓跑,赶紧打开书籍查看相关资料,并为大家整理了一些知识点,希望可以帮助到大家。
回顾JS的数据类型
我们先来回顾一下ECMAScript6 标准的 7 种数据类型:
- String
- Number
- Object
- Boolean
- Undefined
- Null
- Symbol
什么是typeof操作符
鉴于ECMAScript是松散类型的,因此需要有一种手段来检测给定变量的数据结构。
typeof
就是负责这方便信息的操作符。
节选自《JavaScript高级程序设计第三版》
对于一个值使用 typeof
操作符,可能返回下列某个字符串:1
2
3
4
5
6“undefined” —— 如果这个值没有被定义
“boolean” —— 如果这个值是布尔值
“string” —— 如果这个值是字符串
“number” —— 如果这个值是数值
“object” —— 如果这个值是对象或者null
“function” —— 如果这个值是函数
看到这里,小伙伴可能就会有些困惑了,在 JS
中,Null
和 Object
是 2 种数据类型,但是 typeof
却统一认为都是 Object
,这是为什么呢?在阅读书籍中,我发现在《你不知道的JavaScript(上卷)》中提到了以下内容:
原理是这样的: 不同的对象在底层都表示为二进制,在
JavaScript
中二进制前三位都为 0 的话会被判断为object
类型,null
的二进制表示是全 0,自然前三位也是 0,所以执行typeof
时会返回“object”。
如何区分 Object 和 Null 类型
因为 typeof
无法区分这 2 种类型,所以我们可以采用 instanceof
来区分。