前端面试-不简单的JS数据类型存储机制

日常面试中,数据类型也是一个主要类型的面试问题,这种基础类的反而常常容易忽略。

基本数据类型(7种)

  1. undefined:未定义类型
  2. null:空值类型
  3. boolean:布尔类型(true/false)
  4. number:数字类型(含NaN)
  5. string:字符串类型
  6. symbol:符号类型(ES6新增)
  7. bigint:大整数类型(ES2020新增)

引用数据类型(对象类型)

  1. Object:普通对象
  2. Array:数组对象
  3. Function:函数对象
  4. Date:日期对象
  5. RegExp:正则对象
  6. 其他内置对象...

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()

原文链接:,转发请注明来源!