整理了牛客、CSDN的前端开发八股文面经,结合《JavaScript高级程序设计》的内容 + 前端实战开发经验,回答前端面试中JS相关的考点。共2部分。一起加油!!!
牛客上分享的部分考点
![](https://i-blog.csdnimg.cn/blog_migrate/c7d60f81f0d0757766714679b7235694.png)
1.JS中的8种数据类型以及区别:
数据类型:基本类型 & 引用类型
基本类型(值类型)-6种:number, boolean, string, undefined, symbol, null
引用类型
Object, Function
基本包装类(Number, String, Boolean)//构造函数,自定义引用类
内置对象(Math)//typeof 显示 object,因为Math不是构造函数
Array数组, Date日期, RegExp正则表达 //构造函数,自定义引用类
区别:存储
栈:存储对象的变量标识符、堆中的储存地址
堆:存储对象
2.JS中的数据类型检测方案
1.typeof
typeof : 显示number/string/boolean/object/function/ undefined这6种结果
优点:可用于区分基本数据类型-number, string, boolean, undefined, null,对number, string, boolean, undefined, null和object, function这6种数据类型的判断都是准确的
缺点:不能用来区分自定义引用类,对所有的引用类型都只显示function和object两种结果
2.instanceof:
用法:实例 instanceof 构造函数名
优点: 可以从原型的角度,来判断某引用是否属于某构造函数,判断一个实例是否属于它的父类型
举例:
[] instance of Array //true,
[] instanceof Object //true
缺点:不能用来判断基本数据类
3.Object.prototype.toString.call()
优点:可以清楚地显示出数据类型
缺点:用起来比较麻烦
![](https://i-blog.csdnimg.cn/blog_migrate/75c165528910e40833bca9dc19b1d052.png)
3.var, let和const的区别和常见用法
var: 函数作用域,变量提升,*为全局变量(window)的一个属性
let: 块作用域、for循环常用、变量声明不提升
const: 块作用域,定义常量,不能修改(但能修改对象的内部属性)、变量声明不提升
未被声明的变量会被如何处置?会产生暂时性死区:浏览器在检测到一个未被声明的变量类型时,不会报错,会返回undefined
4.undefined和null的区别:
undefined:表示未被赋值(包括未被初始化的变量,函数的默认返回值,没有被传入实参的形参)
null:表示“空值”
5.上下文、作用域、作用域链
上下文:全局上下文,函数上下文//后台使用“变量对象/活动对象”来表现,用于储存变量和函数
作用域、作用域是什么时候创建的?
最大用途是用来隔离变量
在执行函数的时候创建,函数执行结束应该被销毁,上下文中的变量和函数都会被销毁
作用域链、作用域链是什么时候创建的?
决定当前上下文的代码在访问变量和函数的顺序,即提供标识符解析的作用
当前上下问的代码被执行的时候(调用函数)的时候会创建作用域链,将当前上下文所对应的“变量对象”至于作用域链的最前端;
6.闭包和作用
闭包:建立在函数内部的子函数
作用:延长外部函数变量的生命周期;副作用:内存泄露
7. this指向谁
![](https://i-blog.csdnimg.cn/blog_migrate/df950d5f25e438f18546665e3061b62f.png)
*时间充裕的情况下,可阅读this在箭头函数和标准函数中的区别:http://t.csdn.cn/AwrOD
8.call/apply/bind的相同点和不同
相同:都是改变函数的this指向,第1个参数都是this要指向的对象
不同:后续参数形式;是否立刻执行,bind是返回新的函数且函数的this指向对应的对象
9.ES6的特性
1.const/let声明变量
2.箭头函数
3.函数默认参数值
4.类-是原型链的语法糖表现形式(用类取代工厂函数,详情阅读《红宝书》)
5.对象超类-允许使用super
6.2种新的数据结构:Map, WeakMap
后面part 2更新完会上链接🔗~加油加油~