1. 类型
JS 数据类型分为两大类:
原始类型
对象类型
原始(Primitive)类型
在 JS 中,存在着 7 种原始值,分别是:
- boolean
- null
- undefined
- number
- string
- symbol
- bigint
对象(Object)类型
对象类型和原始类型不同的是,原始类型存储的是值,一般存储在栈上,对象类型存储的是地址(指针),数据存储在堆上,这部分的内容具体会在「闭包」小节讲解。
当创建了一个对象类型的时候,计算机会在堆内存中帮我们开辟一个空间来存放值,但是我们需要找到这个空间,这个空间会拥有一个地址(指针)。
涉及面试题
- 0.1 + 0.2 !== 0.3
- JS 类型有哪些?
- 大数相加、相乘算法题
- 修改对象得出结果笔试题
2. 类型判断
typeof
typeof 对于原始类型来说, 除了null 都可以显示正确的类型, 如果想判断null的话可以使用variable===null
- 原理
instanceof
instanceof 通过原型链的方式来判断是否为构建函数的实例, 常用于判断具体的对象类型
- 原理
Object.prototype.toString.call
前几种方式或多或少都存在一些缺陷,Object.prototype.toString.call 综合来看是最佳选择,能判断的类型最完整,基本上是开源库选择最多的方式。
常见面试题
- JS 类型如何判断,有哪几种方式可用
- instanceof 原理
- 手写 instanceof
3. this指向
1、普通函数中的this指向window
2、定时器中的this指向window
3、自调用函数中的this 指向window
4、箭头函数没有this,它的this指向取决于外部环境
5、 构造函数中this和原型对象中的this,都是指向构造函数new 出来实例对象
6、类 class中的this 指向由constructor构造器new出来的实例对象
7、事件中的this指向事件的调用者