当前位置: 首页 > Web前端 > HTML5

前端面试题2017(冗长,有答案)

时间:2023-04-05 23:36:04 HTML5

说明:简答题没有固定答案。下面给出的答案是摘自别处或自己总结的。请指出任何错误。html标签上的title和alt属性有什么区别?alt是html标签的属性,title既是html标签又是html属性。当title用作属性时,它用于为元素提供额外的描述信息。例如在超链接标签a中添加title属性,当鼠标移到链接上时会显示title的内容,达到补充说明或提示的效果。alt属性用于指定替换文字,只能在img、area、input元素中使用。用于在网页图片无法正常显示时,为用户提供文字说明,以了解图片信息。请注意,alt替换图像而不是提供额外的解释性文本。使用alt属性还有一个搜索引擎优化的作用,因为搜索引擎不能直接读取图片信息,而alt可以为其提供文字信息,所以对搜索引擎比较友好。css中relative、absolute、static、fixed的作用,它们相对于谁定位?static(静态定位):出现在文档中通常出现的位置。默认值。元素使用相对于文档的正常布局行为,文档是元素在文档流中的当前布局位置。此时top、bottom、left、right或z-index均无效。Relative(相对定位):您可以使用top、bottom...将元素相对于它在文档中通常出现的位置移动。生成一个相对定位的元素,相对于它在文档中的位置。通过设置顶部、底部、左侧和右侧,它相对于其正常(原始)位置定位。分层分级可以通过z-index来完成。absolute(绝对定位):元素将从文档中移除并准确放置在您指定的位置。生成一个绝对定位的元素,相对于静态定位以外的第一个父元素定位。元素的位置由“left”、“top”、“right”和“bottom”属性指定。分层分级可以通过z-index来完成。绝对定位可以设置margin,不会和其他元素合并。fixed(固定定位):生成一个绝对定位的元素,相对于屏幕柱定位。元素的位置由“left”、“top”、“right”和“bottom”属性指定。分层分级可以通过z-index来完成。打印时,元素出现在每一页的固定位置。Sticky(粘性定位):是相对定位和固定定位的结合,越过阈值前相对定位,再固定定位。绘制css盒模型W3C标准盒模型:width=contentWidth+padding+border+margin。页面上框的大小包括边距、边框、填充和内容。框的实际大小包括内容区域的边框、填充和内容,但不包括边距。还有一点需要说明的是,当我们通过JavaScript代码获取一个元素的大小时,获取到的宽高实际上是盒子模型中内容的大小。IE盒子模型:width=contentWidth(包括border+padding)+margin。IE框模型还包括边距、边框、填充和内容。IE盒模型的内容部分包含边框和填充。border-box和content-box的区别和使用场景?为了更好的形象化content-box和border-box在box-sizing上的区别,我们来举个例子,如下图,这个box-sizing属性有哪些使用场景呢?特殊场景的布局:假设我们有这样一个场景,在设置子类元素的边距或边框时,可能会破坏父层元素的尺寸。这时候我就需要使用box-sizing:border-box将border包含到元素的尺寸中,这样就不会出现父层元素被破坏的情况。表单元素样式统一:表单中部分input元素仍然呈现传统的IE框模型,带有一些默认样式,在不同平台或浏览器上表现不同,导致表单呈现差异。此时,我们可以使用box-sizing属性来构建一个样式统一的表单元素。css清除浮动的方法为clearfix设置一个类,然后在父元素上加上类名:.clearfix:before,.clearfix:after{content:"";display:table;}.clearfix:after{clear:both;}.clearfix:{zoom:1}clearfix技巧基于在父元素上使用“:before”和“:after”伪类。我们可以在浮动元素的父容器前后创建隐藏元素,":before"用于防止元素的上边距塌陷,display:table用于创建匿名table-cell元素,这也确保了IE6/7下的一致性":after"用于防止子元素的底部边距折叠,并清除浮动元素。缺点是代码有点多,好在用的人多,兼容性好。overflow方法:在父元素上设置overflow:hidden/auto。使用auto在IE中有一个滚动条,最好是隐藏的。缺点:如果有元素需要移动到父容器外,会被隐藏,或者给子元素做阴影,没有padding,也会被父元素截断。在父容器的结束标签前添加一个空标签,并设置clear:both。但是如果很多元素都包含浮动元素,那就麻烦了,语义也不好。谈谈你如何适应各种尺寸的手机。以宽度为375px的设计稿为例?根据以下代码,判断p元素中文字的颜色?Content

//redjavascript文章代码问题函数fun(n,o){console.log(o);return{fun:function(m){returnfun(m,n)}}}vara=fun(1).fun(2).fun(4).fun(8)//undefined,1,2,4varUser={count:1,getCount:function(){returnthis.count}}varfn=User.getCountconsole.log(fn());//undefinedfunctiontest(){for(vari=0;i<5;i++){setTimeout(function(){console.log(i)},0)}}test();//5,5,5,5,5varo={fn:function(){console.log(fn)}}console.日志(o.fn());//ReferenceErrorfunctionAnimal(name){this.name=name;}Animal.prototype.sayName=function(){console.log(this.name)}functionCat(name){Animal.call(this,name)}varkat=newCat('Jim')kat.sayName();//TypeError:kat.sayNameisnotafunction//除非添加了Cat.prototype=newAnimal()方法去重数组/**方法一:*1.构造一个新的数组来存储结果*2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组进行比较*3.如果结果数组中不存在该元素,则保存itintheresultarray*缺陷:ValuesofreferencetypeandNaN*/functionunique(array){varresult=[];for(vari=0;i[1,2,"1","2",0,"Hello",NaN,NaN]//[{id:'1'},{id:'1'}]=>[{id:'1'},{id:'1'}]//方法二:ES6Array.from(newSet(array))//[1,2,1,2,'1','2',0,'1','Hello','1','Hello',NaN,NaN]=>[1,2,"1","2",0,"Hello",NaN]编写一个方法来解析URL中的查询字符串进入字典对象varpath='www.u.com/home?id=2&type=0&dtype=-1';functionparseUrl(url){varresult=[];vartmp=(url.split('?'))[1];vartmpArr=tmp.split('&');tmpArr.map(function(v,k){varvalue,key;varobj={};key=(v.split('='))[0];value=(v.split('='))[1];obj[key]=value;result.push(obj)})返回结果;}console.log(parseUrl(path));//[{id:'2'},{type:'0'},{dtype:'-1'}]//功能:获取url中参数的值functionUrlSearch(url){varname,value;varstr=网址;//获取整个地址栏varnum=str.indexOf("?");str=str.substr(num+1);//获取所有参数stringvar.substr(start[,length]vararr=str.split("&");//将每个参数放入数组中for(vari=0;i0){name=arr[i].substring(0,num);value=arr[i].substr(num+1);这个[name]=value;}}}//测试varpath='www.u.com/home?id=2&type=0&dtype=-1';varRequest=newUrlSearch(path);//实例化console.log(Request);//[{dtype:'-1'},{id:'2'},{type:'0'}]varnickname=encodeURIComponent(Request.dtype);console.log(nickname);//-1//功能:修改url参数值functionchangeURLArg(url,arg,arg_val){varpattern=arg+'=([^&]*)';varreplaceText=arg+'='+arg_val;if(url.match(模式)){vartmp='/('+arg+'=)([^&]*)/gi';tmp=url.replace(eval(tmp),replaceText);returntmp;}else{if(url.match('[\?]')){返回nurl+'&'+replaceText;}else{返回url+'?'+replaceText;}}returnurl+'\n'+arg+'\n'+arg_val;}varpath='www.u.com/home?id=2&type=0&dtype=-1';console.log(changeURLArg(path,'type',4));//"www.u.com/home?id=2&type=4&dtype=4"ajax请求get和post的区别说说cookie、sessionStorage、localStorage的区别和优缺点你知道的性能优化方法有哪些http什么是http状态码?他们的意思是什么?状态码告诉服务器返回的请求结果2XX表示请求被正常处理。200OK、204NoContent(服务器收到的请求已经处理成功,但返回的响应报文中不包含实体主体部分)、206PartialContent(客户端进行了范围请求,请求了资源的某一部分);3XXredirection,301movedpermanently(资源已经分配了新的uri),302found(这次使用新的uri访问),303seeother(用get定向到另一个uri),304notmodified,307temporaryredirect(从发布到获取不会改变);4XX客户端错误、400badrequest(请求报文中存在语法错误)、402unauthorized(发送的请求需要通过http认证)、403forbidden(服务器拒绝访问资源)、404notfound(服务器未找到)没有请求的资源);500XXservererror500internalservererror(服务器在执行过程中出现错误),503serviceunavailable(服务器繁忙或停机维护)。从输入URL到加载页面,页面会发生什么情况?通常,浏览器根据浏览器地址栏中指定的URL,从Web服务器获取资源文件等信息,从而显示网页。具体有以下步骤:1、浏览器接收URL(信息包括:协议方案名称、服务器地址:服务器端口号、分层文件路径、查询字符串?、分片标识符)2。将URL与缓存进行比较。如果请求的页面在缓存中,没有过期,直接进入第8步。3、负责域名解析DNS服务。系统执行DNS查找并将IP地址返回给浏览器。DNS服务适用于HTTP协议等位于应用层的协议。它提供域名和IP地址之间的解析服务。可以通过域名查找IP地址,也可以通过IP地址反向查找域名。4.浏览器与服务器建立TCP连接(在传输层)。这一步非常复杂,因为使用了HTTPS。三向握手(SYN、SYN/ACK、ACK),如果任何一方没有收到信息,就会重新发起TCP连接。5、浏览器通过TCP协议连接向服务器发送HTTP请求。数据通过应用层、传输层、网络层和链路层传输到下一个目的地。应用层决定了向用户提供应用服务时的通信方式(http协议、DNS服务)。传输层向上层应用层提供网络连接中的两台计算机之间的数据传输(TCP协议和UDP协议)。网络层用于处理在网络上流动的数据包。数据包是网络传输的最小数据单元。该层指定了到达对方计算机并将数据传输给对方的路径。链路层处理连接到网络的硬件部分(网卡、光纤)。这一步还涉及发送到服务器的请求消息(请求方法、请求URI、协议版本、头字段、内容实体)。6.服务器接收请求,从其文档空间中查找资源并返回HTTP响应。服务器返回的响应消息包括协议版本、状态码、解释状态码的原因短语、响应头字段和实体主体。7、浏览器接受HTTP响应,检查HTTP头中的状态码,做出不同的处理方式。有关返回状态码的具体说明,请参阅上一个问题。8.如果可缓存,响应将被存储。根据header字段判断是否缓存。比如Cache-Control,no-cache(每次使用缓存前和服务器确认),no-store绝对禁止缓存。9、浏览器解码响应浏览器拿到index.html文件后,开始解析其中的html代码。遇到js/css/image等静态资源时,请求服务器下载;解析成对应的树数据结构DOM树、CSS规则树,Javascript脚本通过DOMAPI和CSSOMAPI操作DOM树和CSS规则树。10.渲染页面11.关闭TCP连接或继续保持连接挥手四次关闭连接(FINACK,ACK,FINACK,ACK)。页面渲染过程页面渲染过程一般来说就是浏览器拿到html文档,从上到下构建dom树,然后根据dom树构建渲染树(和dom树有区别的是,浏览器解析html文档和解析css样式形成dom树和cssdom树,这两者结合起来会构建渲染树)。这里有一种情况。如果在头部写一个链接css文件,然后插入一个script标签导入一个巨大的js文件,由于浏览器下载css文件需要时间,此时浏览器还在自上而下。解析dom树,但是遇到一个script标签,因为样式表还没有下载,所以阻塞了渲染树的构建。css文件加载完成后,会结合刚才的dom树构建渲染树,显示在页面上,然后再加载js文件。但是恰好js文件很大,导致浏览器无法往下解析,要等巨大的js文件下载完再继续往下解析。如此反复,最后将渲染树渲染到页面上。jsonpReact原理ChapterReactLifecycleComponents之间的通信算法Chapter写一个大整数乘法计算的方法如果一个数非常大,计算会导致精度丢失的问题。网上有各种解决办法,大家可以自行google。我这里给出的思路是将整数转换成字符串类型的数据,然后将转换后的数据拆分成单个数据,计算单个数据的乘法,最后将结果相加转换回数字类型。我不知道这是否可行。..写一个排序算法我之前整理过一篇博客,适合算法初学者——几种基本的排序算法,输入url到页面显示参考:http://www.jianshu.com/p/71cf...