目录
1,Web前端面试的常见面试题汇总
今天小编要跟大家分享的文章是关于参加Web前端面试的常见面试题汇总。准备参加Web前端面试的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助。1.渐进增强与优雅降级渐进增强并不是一种技术,而是一种设计思想。各个浏览器的渲染能力各不相同,要做一个每个人都能看到的网页、感受到的体验都一致的网站几乎不可能。但还是得网站的可访问性,保证用户在任何环境下都能正常访问网页得核心内容或能使用基本功能(避免网页打不开、排版错误等),并为他们提供当前条件下最好的体验,这就是渐进增强得核心思想。优雅降级也是一种设计思想,为了保证在高版本浏览器中提供最好的体验,碰到低版本浏览器再降级进行兼容处理,使其能正常浏览。这两种思想的区别在于:1.渐进增强是向上兼容,优雅降级是向下兼容;2.渐进增强是从简单到复杂,优雅降级是从复杂到简单;3.渐进增强关注的是内容(保证核心内容),优雅降级关注的是浏览体验(为了兼容低版本浏览器)2.DOCTYPE作用DTD(DocumentTypeDefinition,文档类型定义)是一系列的语法规则,用来定义XML或(X)HTML的文档类型。浏览器会使用它来判断文档类型,决定何种协议来解析,以及切换浏览模式。DOCTYPE是用来声明文档类型和DTD规范的,一个主要的用途便是文件的合法性验证。如果文档代码不合法,那么浏览器解析时便会出现一些差错。HTML5的文档类型声明:HTML4.01Strict(HTML4.01严格模式)的DTD包含所有HTML元素和属性,但不包括展示性的和弃用的元素(如font),它的文档类型声明:"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">标准模式与怪异模式怪异模式(QuirksMode)用于模拟旧浏览器的行为。早期的网站并不会遵循完整的规范,随着浏览器支持越来越多的规范,在那些旧的浏览器中开发的页面在显示时会被破坏。为了向后兼容,浏览器发明了怪异模式,一行错误或无效的DOCTYPE都会触发怪异模式。浏览器使用文件开头的DOCTYPE来决定用怪异模式处理或标准模式处理。DOCTYPE可以确保不同浏览器以相同的方式解析文档,以及执行相同的渲染模式。怪异模式与标准模式的主要区别:1.怪异模式的宽度和高度会包含padding和border。标准模式不包含,标准模式下可以通过设置box-sizing:border-box将标准盒模型转化成怪异模式下的盒模型。2.怪异模式下,当内容超出容器高度时,会将容器拉伸,而不是溢出。3.怪异模式下,在表格中的字体样式(如font-size)不会继承。4.怪异模式下颜色值必须使用十六进制标记法。3.语义化HTML5中的语义化就是让元素、属性或属性值有含义,更准确地标记特定类型的内容。对元素语义化的目的是为了让元素的语义和呈现分离,元素只负责文档内容的结构与含义,而CSS样式控制内容的呈现,像元素,没有语义但却能将字体变粗,这类元素违背了语义化的目的,将会被废弃。优点·使得HTML文档结构清晰、布局合理、主体突出、可读性更强。·有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。·方便其他设备解析,如盲人阅读器根据语义渲染网页。·有利于开发和维护,语义化更具可读性,代码更好维护,与CSS3关系更和谐。语义化标签·定义文档的页眉区域,应作为介绍内容或者导航链接栏的容器;·footer内容的页脚,通常包含该章节作者、版权数据或者与文档相关的链接等信息;·article文档、页面、应用或网站中的独立结构,是可独立分配的、可复用的结构,如在发布中,它可能是论坛帖子、杂志或新闻文章、博客、用户提交的评论、交互式组件,或者其他独立的内容项目;·nav描述一个含有多个超链接的区域,该区域包含跳转到其他页面或页面内部其他部分的链接列表;·section表示文档中的一个区域(或节),比如,内容中的一个专题组;·main定义文档的主要内容,该内容在文档中应当是独一无二的,不包含任何在文档中重复的内容,比如侧边栏,导航栏链接,版权信息,网站logo,搜索框(搜索框作为文档的主要内容);·aside表示一个和其余页面内容几乎无关的部分,被认为是独立于该内容的一部分且可以被单独的拆分出来而不会影响整体。通常表现为侧边栏或嵌入内容。4.超链接伪类:link、:visited、:active和:hover的声明顺序是怎样的?:link表示未访问的链接状态;:visited表示已访问状态;:active表示激活状态(鼠标按下);:hover表示悬停状态。推荐顺序是LVHA,即:link:visited:hover:active。理由如下:·当鼠标悬停在未访问的链接上时,:link和:hover都会命中,如果:hover在:link之前声明,那么(:hover)就会被覆盖;·当鼠标悬停在已访问的连接上时,:visited和:hover都会命中,如果:hover在:visited之前声明,那么(:hover)就会被覆盖;·当鼠标单击链接时,:active和:hover都会命中,我们大多是想让:hover只在悬停时展示样式,按下鼠标时使用:active样式,因此:active在:hover之后声明;·综上,:hover应在:link和:visited之后,在:active之前,因此active在最后。而:link和:visited两者的顺序无所谓,互不影响。5.CSS常见的长度单位CSS中除了px长度单位之外,还有下面几个长度单位:·pc六分之一英寸,1pc=12pt=1/6*1in=16px;·pt一磅,72分之一英寸。1pt=1/12_1pc=1/72_1in≈1.33px;·in一英寸,1in=2.54cm=96px;·ex在含有“X”字母的字体中,它是该字体的小写字母的高度。对于很多字体来说,1ex≈0.5em;·em1em等于父级元素的字体大小,2em就是父级元素字体大小的二倍;·rem当用在根元素()的font-size上面时,它代表了它的初始值;·ch代表元素所用字体font中“0”这一字形的宽度;·vh1vh相当于视口高度的1%,100vh就是视口的高度;·vw1vw相当于视口宽度的1%,100vw就是视口的宽度;·vmax视口高度vw和宽度vh两者中的最小值·vmin视口高度vw和宽度vh两种中的最大值;·%相对于父级元素的大小来确定;参考:CSS[1]CSSpercentage[2]6.事件对象冒泡与捕获事件冒泡与捕获是事件处理的两种机制,主要描述当在一个元素上有两个相同类型的事件处理器被激活会发生什么。在点击子元素时,浏览器运行了两种不同的阶段:捕获阶段和冒泡阶段。捕获阶段的行为:·浏览器检查元素的最外层祖先,是否在捕获阶段中注册了一个onclick事件处理程序,如果是,则运行它;·然后,它移动到中单击元素的下一个祖先元素,并执行相同的操作,然后是单击元素再下一个祖先元素,依此类推,直到到达实际点击的元素;而冒泡与捕获恰恰相反:·浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它;·然后它移动到下一个直接的祖先元素,并做同样的事情,然后是下一个,等等,直到它到达元素;而现代浏览器在默认情况下,所有事件处理程序都在冒泡阶段进行注册。因此上面代码在点击子元素时会先执行子元素绑定的事件,然后向上冒泡,触发父元素绑定的事件。addEventListener函数的第三个参数是个布尔值。含义:·当布尔值是false时(这也是默认值),表示向上冒泡触发事件;·当布尔值是true时,表示向下捕获触发事件;不能冒泡的事件有些事件是不会冒泡的。比如:·blur元素失去焦点时触发,focusout事件也是失去焦点时触发,但可以冒泡;·focus元素获取焦点时触发;·mouseenter鼠标移动到元素上时会触发该事件,与之对应的是mouseover事件,但会冒泡;·mouseleave鼠标离开元素时触发,与之对应的是mouseout,但会冒泡;事件冒泡可以让我们利用事件委托,尤其是处理大量子元素时,如果给每个子元素都绑定事件,这是不优雅的,可以将事件绑定到父元素上,并让子节点上发生的事件冒泡到父节点上,利用e.target属性可以获取到当前触发事件的子元素。事件对象中的方法·stopPropagation()阻止事件冒泡,当设置后,点击该元素时父元素绑定的事件就不会再触发;·preventDefault()阻止默认事件的发生;·stopImmediatePropagation()它用来阻止监听同一事件的其他事件监听器被调用以及阻止事件冒泡,比如给同一个div元素绑定多个click事件(使用addEventListener方法可以注册多个),当在第二个事件函数中调用stopImmediatePropagation方法时,点击div元素时,后面注册的click将不会被触发,而且还会阻止事件冒泡;比如下面的例子,给p绑定多个click事件,在第二个事件函数中调用stopImmediatePropagation,第三个click事件就不会触发,因为也阻止了冒泡,因此父元素的click事件也不会触发。paragraph document.querySelector("div").addEventListener("click",(event)=>{alert("我是div元素,我是p元素的上层元素");//p元素的click事件没有向上冒泡,该函数不会被执行},false);constp=document.querySelector('p')p.addEventListener("click",(event)=>{alert("我是p元素上被绑定的第一个监听函数");},false);p.addEventListener("click",(event)=>{alert("我是p元素上被绑定的第二个监听函数");event.stopImmediatePropagation();//执行stopImmediatePropagation方法,阻止click事件冒泡,并且阻止p元素上绑定的其他click事件的事件监听函数的执行.},false);p.addEventListener("click",(event)=>{alert("我是p元素上被绑定的第三个监听函数");//该监听函数排在上个函数后面,该函数不会被执行},false);“在IE浏览器中,使用e.cancelBubble=true也可以取消事件冒泡;使用e.returnValue=false也能阻止默认事件的发生。target与currentTargettarget属性指向的是事件目标,而currentTarget属性指向的是正在处理当前事件的对象,它总是指向事件绑定的元素。而target指向的可能不是定义时的事件目标。例如:div.addEventListener('click',(e)=>{console.log(e.target,e.currentTarget);},false);e.target可能指向div元素,也可能指向它的子元素。而e.currentTarget总是指向div元素。以上就是小编今天为大家分享的关于参加Web前端面试的常见面试题汇总的文章,希望本篇文章能够对正准备参加前端面试的小伙伴们有所帮助,想要了解更多Web前端知识记得关注北大青鸟Web前端培训官网,最后祝愿小伙伴们工作顺利,成为一名优秀的Web前端工程师。参考资料[1]CSSlength:#/zh-CN/docs/Web/CSS/length[2]CSSpercentage:#/zh-CN/docs/Web/CSS/percentage
2,Web前端5道面试题
1.请说明ECMAScript,JavaScript,Jscript之间的关系?ECMAScript提供脚本语言必须遵守的规则、细节和准则,是脚本语言的规范。比如:ES5,ES6就是具体的一js版本。JavaScript是ECMAScript的一个分支版本,JavaScript实现了多数ECMA-262中描述的ECMAScript规范,但存在少数差异。JScript是微软公司对ECMA-262语言规范的一种实现,除了少数例外(这是为了保持向后兼容),微软公司宣称JScript完全实现了ECMA标准.关系:JavaScript和JScript都是ECMAScript的版本分支,二者在语法上没有多大的区别;只不过一个是NetScape公司的,一个是微软的;IE系列默认是JScript,其它的则反之用JavaScript。2.页面加载过程中可能触发哪些事件?它们的顺序是?页面加载时,大致可以分为以下几个步骤:1)开始解析HTML文档结构2)加载外部样式表及JavaScript脚本3)解析执行JavaScript脚本4)DOM树渲染完成5)加载未完成的外部资源6)页面加载成功执行顺序:1)documentreadystatechange事件2)documentDOMContentLoaded事件3)windowload事件3.函数中在声明变量a前使用a会产生错误吗?为什么?不会,JS中能够进行变量作用域提升,把所有变量、函数的声明提升到当前作用域的最前面,但不进行赋值操作;所以可能造成获取的值是undefined。4.什么是hash,以及hashchange事件?先了解下什么是hash:hash即URL中"#"字符后面的部分。a)使用浏览器访问网页时,如果网页URL中带有hash,页面就会定位到id(或name)与hash值一样的元素的位置;b)hash还有另一个特点,它的改变不会导致页面重新加载;c)hash值浏览器是不会随请求发送到服务器端的;d)通过window.location.hash属性获取和设置hash值。window.location.hash值的变化会直接反应到浏览器地址栏(#后面的部分会发生变化),同时,浏览器地址栏hash值的变化也会触发window.location.hash值的变化,从而触发onhashchange事件。再来了解下什么是hashchange事件:a)当URL的片段标识符更改时,将触发hashchange事件(跟在#符号后面的URL部分,包括#符号)b)hashchange事件触发时,事件对象会有hash改变前的URL(oldURL)和hash改变后的URL(newURL)两个属性。5.什么是CDN,CDN对于网站有什么意义,它有什么样的缺点?CDN又称为内容分发网络;本意在于尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。主要目的:解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。缺点:a)实施复杂,投资大;b)目前大部分的CDN还只是对静态内容加速,对动态加速效果不好;而双线对动态加速的效果跟静态是一样的。