【前端八股文】ES6新特性,面向对象编程,事件循环,null和undefined,前端缓存的理解
ES6新特性
块级作用域
引入let和const关键字,允许在块级作用域中声明变量和常量,解决了以前使用var关键字带来的作用域问题
箭头函数
提供了一种更简洁的函数定义语法,使用=>箭头符号,可以减少函数声明的代码量
默认参数
在函数定义时设置参数的默认值,在不传入参数时使用默认值
扩展运算符
在函数调用,数组,对象中展开数组或对象
解构赋值
允许通过模式匹配的方法从数组或对象中解析出值,并赋给变量,可以快速获取使用值
模板字符串
使用反引号`包裹字符串,使用${}插入变量和表达式,支持多行字符串的书写
类
引入类class的概念,并通过constructor方法定义构造函数,简化了面向对象编程
模块化
ES6引入了原生的模块系统,使用import和export关键字可以方便地导入和导出模块,提供了更好的代码组织和复用
Promise和异步await
引入了Promise对象和异步/await语法,提供了更好的异步编程方式,避免了回调地狱
Map和Set
引入了Map和Set两种新的数据结构,提供了更方便高效的数据存储和操作方式
数组方法
find():返回数组中满足条件的第一个元素。findIndex():返回数组中满足条件的第一个元素的索引。filter():返回数组中满足条件的所有元素组成的新数组。forEach():遍历数组中的每个元素,并执行指定的回调函数。map():将数组中的每个元素进行处理,返回一个新数组。some():判断数组中是否有至少一个元素满足指定条件。every():判断数组中的所有元素是否都满足指定条件。reduce():对数组中的元素进行累加或累积计算。includes():判断数组是否包含指定的元素。Array.from():将类似数组的对象或可迭代对象转换为真正的数组。
字符串方法
startsWith():判断字符串是否以指定的字符开头。endsWith():判断字符串是否以指定的字符结尾。includes():判断字符串是否包含指定的字符。repeat():重复字符串指定次数。padStart():在字符串的开头添加指定字符,直到字符串达到指定长度。padEnd():在字符串的结尾添加指定字符,直到字符串达到指定长度。trim():去除字符串两端的空格。
面向对象编程
面向对象的特征
1、“抽象”,把现实世界中的某一类东西,提取出来,用程序代码表示;
2、“封装”,把过程和数据包围起来,对数据的访问只能通过已定义的界面;
3、“继承”,一种联结类的层次模型;
4、“多态”,允许不同类的对象对同一消息做出响应。
事件循环
事件循环过程确保了 JavaScript 在单线程环境下的异步执行
通过将异步任务转换为微任务,在适当的时机执行,保证了任务的顺序性和及时性
-
同步任务执行,这个过程可能会产生微任务,将微任务加入到微任务队列中
-
微任务执行,微任务执行的时候可能会产生新的微任务,系统会将所有微任务执行完成,直到微任务队列为空
-
执行宏任务,执行过程可能会产生微任务,将微任务加入到微任务队列中
-
微任务执行,微任务执行的时候可能会产生新的微任务,系统会将所有微任务执行完成,直到微任务队列为空
-
执行下一个宏任务,执行过程可能还会产生微任务,将微任务加入到微任务队列中
再次执行2,如此往复,事件就循环起来了
null和undefined
undefined代表未定义的,通常是
- 定义一个变量没有初始化,JavaScript就会给他一个undefined
- 没有给一个形参传实参,那么这个形参的变量值为undefined
- 一个没有指定返回值的函数调用后返回undefined
null代表一个空值,JavaScript不会主动给一个变量设置null,JavaScript只会给一个未初始化的变量设置为undefined,它是用来让程序员表明某个用var声明的变量时没有值
前端缓存的理解 || 前端数据持久化的理解
http缓存是做http请求传输时带上的缓存,一般是后端配置,主要在服务器代码上配置,浏览器缓存一般是前端在js中配置的
一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷
缓存是最简单高效的数据请求优化方法,数据请求可分为,发送请求,后端处理,浏览器响应三个阶段,缓存可以在一和三中进行优化,比如直接使用缓存不请求数据,或者前端发送请求,但后端和前端数据一样,后端就不用回传数据,减少浏览器响应数据

