日常面试中,数据类型也是一个主要类型的面试问题,这种基础类的反而常常容易忽略。
基本数据类型(7种)
- undefined:未定义类型
- null:空值类型
- boolean:布尔类型(true/false)
- number:数字类型(含NaN)
- string:字符串类型
- symbol:符号类型(ES6新增)
- bigint:大整数类型(ES2020新增)
引用数据类型(对象类型)
- Object:普通对象
- Array:数组对象
- Function:函数对象
- Date:日期对象
- RegExp:正则对象
- 其他内置对象...
1.基本数据类型存储方式
- 存储位置:栈内存(Stack)
- 存储方式:直接存储数据值
2. 引用数据类型存储方式
- 存储位置:堆内存(Heap)
- 存储方式:栈内存存储指针地址,堆内存存储实际数据
5个必须掌握的面试考点
通过JSON的方式完成的深拷贝在常规使用中是没问题,极端情况,如函数对象引用自身出现循环引用,就会报错,此时需要手动递归的方式做特殊处理实现深拷贝,或者引用健全的工具库。
高频面试题
Q1:typeof null返回什么?为什么?
A:返回"object",这是JavaScript设计初期的遗留问题。null值表示空对象指针,二进制前三位为000(与对象类型标识相同)
Q2:如何判断数组类型?
A:优先使用Array.isArray(),其次是
Object.prototype.toString.call(arr) === '[object Array]'
Q3:基本类型有方法吗?
A:基本类型本身没有方法,但当调用方法时会临时创建包装对象(如"text".length会创建String对象)
Q4:0.1+0.2为什么不等于0.3?
A:由于IEEE 754双精度浮点数精度问题,实际计算结果为0.30000000000000004
Q5:如何实现真正的深拷贝?
A:可通过递归实现、使用JSON序列化(不处理函数和循环引用)、或第三方库如lodash的_.cloneDeep()