前端进阶面试题大全:JavaScript、性能优化、工程化与源码解析
# 进阶篇
相关专题:本篇适合系统准备中高级前端面试。需要规划完整顺序可先看前端面试题大全与复习路线;需要现场编码练习可进入前端手写面试题,需要快速查漏补缺可使用每日一题综合题库。
# 一、JS基础
# 1 类型及检测方式
30 秒速记
- 原始类型 7 个:
number、string、boolean、null、undefined、symbol、bigint;其余都是引用类型 - 存储差异:原始类型值存栈上,引用类型值在堆上、栈里只存地址
- 四种检测手段:
typeof(原始够用,null和引用类型分不清)、instanceof(看原型链,跨iframe失效)、constructor(可被改写)、Object.prototype.toString.call()(最准) typeof null === 'object'是历史遗留 bug,判断数组一律用Array.isArray- 加分点:
Object.prototype.toString之所以准,是因为它读的是内部标签Symbol.toStringTag
JavaScript 有 7 种基本类型和 Object 引用类型,检测时要根据目标选择 typeof、instanceof 或 Object.prototype.toString.call()。 typeof 适合基本类型和函数,但 typeof null、数组及普通对象都会得到 object。instanceof 本质上检查原型链,适合引用类型,却不能正确判断基本类型,而且 constructor 可能被修改。需要精确区分数组、日期、正则等对象时,我一般会用 Object.prototype.toString.call()。
