1.深拷贝浅拷贝的区别?怎样实现一个深拷贝?
浅拷贝:指的是创建新的数据,这个数据有着原始数据属性值的一部分精确拷贝。
深拷贝:开辟一个新的栈,俩个对象属性完全相同,但是对应俩个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
通过递归实现深拷贝
通过JSON.stringify()实现
loddash/doneDDeep
2.js中的基本数据类型 和 引用数据类型都有哪些?
基础数据类型:字符串、数值、布尔值、undefined、null
引用数据类型:对象、数组、函数
3.常见 DOM 操作有哪些?
查找节点、新建、增加、删除节点、设置样式
1.获取dom元素:document。qurerySelector()
2.父节点:parentNode
3.子节点:childNodes(获取所有子节点内容,会解析换行、空格等)
4.子节点:children(获取子节点标签)
5.下一个兄弟节点:nextSibling
6.前一个兄弟节点:previousSibling
7.下一个兄弟元素:nextElementSibling
8.上一个兄弟元素:previousElementSibling
9.获取自定义属性:dataset
10.元素内容:innerHTML(解析标签,innertext 不解析标签)
11.追加节点:appendchild
12.追加得到某个节点前:insertBefore
13.创建元素节点:createElement
14.节点克隆:cloneNode
15.删除子节点:removeChild
4.变量的生命周期是什么?
分为三个阶段:
1.声明阶段:在作用域中注册一个变量
2.初始化阶段:分配内存,给作用域中的变量创建绑定,在这个阶段变量自动的被初始化为 undefined
3.赋值阶段:给已经初始化过的变量赋值
5.简单说一下什么是函数提升
Var、function 可以先调用,后声明
let 和 const 只能先声明,后使用
6.简述原型对象、构造函数、实例对象三者之间的关系
1.构造函数通过 prototype 指向原型对象
2.原型对象通过 constructor 指向构造函数
3.实例对象通过 __proto__ 指向原型对象
7.什么是回调地狱?以及如何解决回调地狱
大量使用回调函数进行异步操作,出现多层嵌套,形成横向金字塔,称为回调地狱。
1.Promise:导入fs模块,需要创建promise实例对象
2.then-fs:使用 then-fs 模块
3.async 和 await:使用 then-fs 模块,利用async修饰函数,await返回then()里面回调函数的参数 res