1.数组有什么方法?
- map((item,index)=>{...})
- splice(删除元素的起始位置,要删除的个数,替换元素的值)
- slice(开始的索引,结束的索引) 截取元素
- join('',") 将数组变成字符串,同字符串的split()方法组合使用
- concat(数组,数组,数组...)实现数组的拼接
- push()从后面增加一个元素,pop() 方法用于删除并返回数组的最后一个元素
- shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。 unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
2.如何解决地狱回调?
promise async generator
3.localStorage和sessionstory区别
- localStorage生命周期是永久,除非主动清除localStorage信息,否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。
- sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。
复杂数据的存储
存储数据前:利用JSON.stringify将对象转换成字符串
获取数据后:利用JSON.parse将字符串转换成对象
4.使用promise
1、基本用法:
(1)、首先我们new一个Promise,将Promise实例化
(2)、然后在实例化的promise可以传两个参数,一个是成功之后的resolve,一个是失败之后的reject
(3)、Promise实例生成以后,可以用then方法分别指定Resolved状态和Reject状态的回调函数
参照 :https://www.cnblogs.com/nelson-hu/p/7777176.html
2.promise原理:
5.Let和var的区别
- ES6 新增了
let
命令,用来声明局部变量。但是所声明的变量,只在let
命令所在的代码块内有效,而且有暂时性死区的约束。let不允许在相同作用域内,重复声明同一个变量。
ES6的let让js真正拥有了块级作用域,也是向这更安全更规范的路走,虽然加了很多约束,但是都是为了让我们更安全的使用和写代码。
6. 闭包
一句话可以概括:闭包是有权访问其他作用域的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放。
7.类 Class类继承
(1)ES5和ES6的类有什么区别?
ES5的类叫做构造函数,
ES6中的类只是语法糖,它并没有改变类实现的本质。
8.事件冒泡
事件冒泡:事件到达目标节点后,会沿着捕获阶段的路线返回。同样,所有经过的节点都会触发对应的事件
事件捕获:当一个事件触发后,从window对象出发,不断经过下级节点,直到抵达最终目标节点(event.target)。在事件达到目标节点之前就是事件捕获的phrase。所有经过的节点都会触发该事件。
事件委托(代理)l利用事件冒泡
参看:https://blog.csdn.net/weixin_42787326/article/details/100705808
9.Url到浏览器展示页面的都经过了哪些东西
一般会经历以下几个过程:
1、首先,在浏览器地址栏中输入url
2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
5、握手成功后,浏览器向服务器发送http请求,请求数据包。
6、服务器处理收到的请求,将数据返回至浏览器
7、浏览器收到HTTP响应
8、读取页面内容,浏览器渲染,解析html源码
9、生成Dom树、解析css样式、js交互
10、客户端和服务器交互
11、ajax查询
其中,步骤2的具体过程是:
浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
ISP缓存:若上述均失败,继续向ISP搜索。