js面试一

122 阅读3分钟

1.js延迟加载

1.js文件放在最底部。

但是如果js放在最前边,需要加入defer延迟加载,否则下载HTML,遇见js进行下载,在执行js,最后下载THML

defer和async 区别

async并行下载js和html 然后执行js,在执行HTML,js先加载先执行

defer 解析HTML并下载js,等HTML解析完成在执行js,并顺次执行

动态创建dom方式:对文档加载事件进行监听,文档加载完成后再动态的创建script标签引入js脚本。

使用setTimout 延迟加载

2.==与===

== 比较值

=== 比较值和类型

1=="1" true 进行隐式转化

true == 1 true 进行隐式转化

null == undefined true

[1,2] == '1,2' true 进行隐式转化

3.localstorage,sessionstorage,cookie 的区别

共同点客户端存放数据。

不同点:

有效期:localstorage持久化存储 ,sessionstorage浏览器关闭之前有效,使用cookie需要环境,cookie可以设置有效期时间,浏览器关闭依旧有效在有效时间中。

 let date = new Date()
 let time = 2000*60*60*24
 time=date.getTime()+time
 date.setTime(time)
 document.cookie="xxx=xx;expires="+date.toUTCString()

存储大小:cookie 不能超过4k ,localstorage和sessionstorage不能超过5M,具体根据不同浏览器。

作用域:sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的

不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。

cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。

localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理

安全性:WebStorage不会随着HTTP header发送到服务器端,所以安全性相对于cookie来说比较高一些,不会担心截获,但是仍然存在伪造问题

4.大文件上传

分片上传:

文件按照规则分割成相同大小的数据块。

初始化宇哥分片上传任务,让返回唯一标识

按照一定规则把各个数据上传

发送完服务器端判断,合并成原始文件

5.token无感登录

不需要返回登录页面,判断token返回过期后调用刷新token的接口,或定时器定时刷新token

登录成功获取refreshToken和token

客户端在后续的请求中使用Token作为凭证,向服务器证明其身份和权限

保存token,401状态中引入刷新token方法,端的拦截器会检查响应中是否存在新的Token,并将其保存在本地。

替换新的token

如果refreshToken也过期了,那么需要重新登录。清除所有过期的token,然后重新执行登录流程。

6.同源策略

协议 域名 端口 相同就是同源。 不同域名指向同一个ip地址也是不同源的,产生跨越

JSONP

CORS

websocket

方向代理

7.防抖和节流

页面频繁触发事件优化

防抖:避免事件重复触发

节流:把频繁触发的事件减少,隔一时间执行,如滚动动画。

8.setTimeout最小执行时间是多少

最小执行时间是4ms(毫秒)

setInterval 最小执行时间是10ms

9.get和post

image.png

10.预检请求

如自定义header传入token会触发预检请求,这个额外的请求被称为预检请求,会对响应时间造成很大的延迟,从而影响 性能。

使用简单请求可以避免,HTTP 请求满足以下条件,可以标记为简单请求,请求方式应该是 GET,POST,HEAD。 只允许携带几个固定的头信息

预检可以避免跨域请求对服务器的用户数据产生未预期的影响。