答:JS数据类型有:
基本数据类型:number,string,Boolean,null,undefined,symbol(ES6新增)
复合类型:Object,function
答:call,apply,bind主要作用都是改变this指向的,但使用上略有区别,说一下区别:
call和apply的主要区别是在传递参数上不同,call后面传递的参数是以逗号的形式分开的,apply传递的参数是数组形式 [Apply是以A开头的,所以应该是跟Array(数组)形式的参数]
bind返回的是一个函数形式,如果要执行,则后面要再加一个小括号 例如:bind(obj,参数1,参数2,)(),bind只能以逗号分隔形式,不能是数组形式
你们公司项目是如何管理的?
答:主要通过git来进行项目版本控制的
说几个git常用命令?
答:我工作中常用的有git add ,git status,git commit –m,git push,git pull等
说一下多人操作同一个文件,如果出现冲突该如何解决?
答:当遇到多人协作修改同一个文件时出现冲突,我先将远程文件先git pull下来,手动修改冲突代码后,再git add ,git commit,git push再上传到远程仓库。如果pull也pull不下来提示冲突的话,可以先通过git stash暂存下来,然后再pull拉取,然后git stash pop,取出原来写的,手动修改,然后提交
(这边git相关操作可以根据自己的经验来回答无需死记硬背)
说一下你是如何与后端进行数据交互的
答:我和后端通过ajax来进行数据交互的,通过统一制定的接口文档,来实现前后端高效开发,如果接口文档不能详细说明,或者接口文档上的参数请求不出数据,我会主动和后端工程师沟通,直到完成跟接口相关的业务开发。当然这其中为了验证一些接口问题,会用到一些辅助工具,比方说,runapi这种在线测试工具
如果后端数据接口没有准备好,你是如何工作的
答:如果后端接口还没有准备好,我会和后端工程师沟通,通过制定接口返回数据的格式,然后前端通过一些mock数据的工具(上家公司使用的是easymock,贼简单)来批量生成假数据,可以让前端和后端同时开发,而无需等待后端数据接口写好再开发,这样提升项目整体的开发效率
说一下你对ajax的同源策略的理解
答:ajax同源策略是因为安全的考虑,ajax不允许访问不同域名下的资源即所谓同源策略的意思。
说一下什么情况下会产生跨域及产生跨域的解决方案和实现原理?
答:产生跨域的情况有:不同协议,不同域名,不同端口以及域名和ip地址的访问都会产生跨域。
跨域的解决方案目前有三种主流解决方案:
跨域是浏览器做出的限制,和后端没关系
答:jsonp实现原理:主要是利用动态创建script标签请求后端接口地址,然后传递callback参数,后端接收callback,后端经过数据处理,返回callback函数调用的形式,callback中的参数就是json
答:前端代理我在vue中使用那个vue.config.js里面配置一个proxy,里面有个target属性指向跨域链接.修改完重启项目就可以了.实际上就是启动了一个代理服务器.绕开同源策略,在请求的时候,通过代理服务器获取到数据再转给浏览器
答:CORS全称叫跨域资源共享,主要是后台工程师设置后端代码来达到前端跨域请求的(注:现在主流框架都是用代理和CORS跨域实现的)
答:交互流程:
先创建XHR对象即XMLHttpRequest()
然后open准备发送,open中有三个参数一是提交方式get和post,二是接口地址,三是同步和异步
第三步是用send发送
第四步再发送的过程中通过onreadystatechange来监听接收的回调函数,可以通过判断readyState==4和status==200来判断是否成功返回,然后通过responseText接收成功返回的数据
答:同步就可以说代码是从上往下来执行的。异步可以认为成有些代码是并行执行吧,耗时的任务。不会阻塞后面代码的执行。
异步解决方案主要有三个:
其实这一块涉及到了一个js的运行机制吧。哪些异步的任务都开启了异步的线程队列来处理。最后放入异步队列里面。主线程执行完毕后从异步队列里面取出最靠前的执行。就是事件循环机制(eventLoop);
下面这块不用主动回答:
那如果ajax请求.我想要用同步的方式来执行.怎么办?
Ajax原生的话,open方法的后面设置成false;jq里面有一个async参数设置成false
如果,我想同时执行多个ajax不管前后顺序,但是都执行完之后再做操作怎么办?
Promise.All方法
这个东西我研究过.是js的一个底层运行原理,js是单线程的,但是也有一些耗时任务,会影响执行效率.代码都在主线程中执行,当遇见你像ajax请求.setTimeout定时器时候,会单独开启异步线程.异步线程耗时之后会推入异步队列中等待执行.然后当主线程执行完毕之后.会到异步队列中取出到主线程中执行.然后再去异步队列中取第二个.这个来回取的过程就是您所说的事件循环(eventLoop)吧
答:通过在文件名后面添加随机数(也称为文件指纹)来实现,主要原理是浏览器对访问过的文件,首先会检测第二次请求的文件url在浏览器是否缓存过,如果缓存过就使用,否则如果是一个新的文件url,则从服务器重新请求
答:javaScript原生Ajax:用的是XMLHttpRequest对象
jQuery中的Ajax: $.ajax(),$.getJSON(),$.get(),$.post()等
vue中axios(主流)
微信小程序Ajax:用的是小程序内置的wx.request()写法和jquery的$.ajax()类似,参数url,success,data,method,fail等
Uniapp用的是uni.request 另外还有一个fetch请求
答:vue最大特点我感觉就是“组件化“和”数据驱动“
组件化就是可以将页面和页面中可复用的元素都看做成组件,写页面的过程,就是写组件,然后页面是由这些组件“拼接“起来的组件树
数据驱动就是让我们只关注数据层,只要数据变化,页面(即视图层)会自动更新,至于如何操作dom,完全交由vue去完成,咱们只关注数据,数据变了,页面自动同步变化了,很方便