您现在的位置是: 首页 > SEO知识 SEO知识
前端开发面试题及答案_前端开发面试题及答案2022
zmhk 2024-06-23 人已围观
简介前端开发面试题及答案_前端开发面试题及答案2022 大家好,今天我来为大家揭开“前端开发面试题及答案”的神秘面纱。为了让大家更好地理解这个问题,我将相关资
大家好,今天我来为大家揭开“前端开发面试题及答案”的神秘面纱。为了让大家更好地理解这个问题,我将相关资料进行了整合,现在就让我们一起来探索吧。
1.经典的 Web 前端或者 JavaScript 面试笔试题有哪些?
2.腾讯WEB前端笔试题和面试题答案
3.Web前端5道面试题
4.前端面试的H5问题有哪些
5.前端面试题之解决浏览器兼容性的方案
6.2022年前端React的100道面试题的第12题:区分props和state
经典的 Web 前端或者 JavaScript 面试笔试题有哪些?
一、不定项选择题(每题3分,共30分)\x0d\1.声明一个对象,给它加上name属性和show方法显示其name值,以下代码中正确的是(D)\x0d\A.varobj=[name:"zhangsan",show:function(){alert(name);}];\x0d\B.varobj={name:”zhangsan”,show:”alert(this.name)”};\x0d\C.varobj={name:”zhangsan”,show:function(){alert(name);}};\x0d\D.varobj={name:”zhangsan”,show:function(){alert(this.name);}};\x0d\2.以下关于Array数组对象的说法不正确的是(CD)\x0d\A.对数组里数据的排序可以用sort函数,如果排序效果非预期,可以给sort函数加一个排序函数的参数\x0d\B.reverse用于对数组数据的倒序排列\x0d\C.向数组的最后位置加一个新元素,可以用pop方法\x0d\D.unshift方法用于向数组删除第一个元素\x0d\3.要将页面的状态栏中显示“已经选中该文本框”,下列JavaScript语句正确的是(A)\x0d\A.window.status=”已经选中该文本框”\x0d\B.document.status=”已经选中该文本框”\x0d\C.window.screen=”已经选中该文本框”\x0d\D.document.screen=”已经选中该文本框”\x0d\4.点击页面的按钮,使之打开一个新窗口,加载一个网页,以下JavaScript代码中可行的是(AD)\x0d\A.\x0d\B.\x0d\C.\x0d\D.\x0d\\x0d\\x0d\5.使用JavaScript向网页中输出hello,以下代码中可行的是(BD)\x0d\A.\x0d\document.write(hello);\x0d\\x0d\B.\x0d\document.write(“hello”);\x0d\\x0d\C.\x0d\hello\x0d\\x0d\D.\x0d\\x0d\document.write(“hello”);\x0d\\x0d\\x0d\6.分析下面的代码:\x0d\\x0d\\x0d\\x0d\functionwriteIt(value){document.myfm.first_text.value=value;}\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\
腾讯WEB前端笔试题和面试题答案
CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。可以用简单的方式满足很多常见的复杂的布局需求。它的优势在于开发人员只是声明布局应该具有的行为,而不需要给出具体的实现方式。浏览器会负责完成实际的布局。该布局模型在主流浏览器中都得到了支持。采用flex布局的元素,成为flex容器。它的所有子元素自动成为容器成员,称为flex项目。常用的,设置到容器上的属性有:
设置到项目上的属性:
(Block Formatting Context)块级格式化上下文。BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之也如此.并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。
上述方法都可以创建BFC,但是会带来一些负面影响:
::before是css3的写法,:before是css2的写法,用来设置对象前的内容
:before的兼容性要比::before好
更准确的说法
1、transition 是过渡,是样式值的变化的过程,只有开始和结束;animation 其实也叫关键帧,通过和 keyframe 结合可以设置中间帧的一个状态;
2、animation 配合 @keyframe 可以不触发时间就触发这个过程,而 transition 需要通过 hover 或者 js 事件来配合触发;
3、animation 可以设置很多的属性,比如循环次数,动画结束的状态等等,transition 只能触发一次;
4、animation 可以结合 keyframe 设置每一帧,但是 transition 只有两帧;
常规方法
不需要使用transform属性时
webkit内核
参考链接:
CSS实现不换行/自动换行/文本超出隐藏显示省略号
object-fit CSS 属性指定可替换元素的内容应该如何适应到其使用的高度和宽度确定的框。这个CSS属性可以达到最佳最完美的居中自动剪裁的功能
@import规则一定要先于除了@charset的其他任何CSS规则。
不推荐使用@import:
因为浏览器的兼容的问题,不同浏览器有些标签的默认值是不同的,如果没有CSS初始化往往会出现浏览器之间的页面显示差异。
伪元素和伪类的区别总结
css继承指的是被包在内部的标签将拥有外部标签的样式性,即子元素可以继承父元素的属性。
相关链接:
CSS 继承,哪些属性能继承,哪些不能
z-index可以改变元素层叠顺序,z-index较大的会叠加在z-index较小的元素上方。z-index值相同时,则按照文档流顺序,后面的覆盖前边的。
px就是pixel的缩写,意为像素。px就是一张最小的一个点,一张位图就是千千万万的这样的点构成的,比如常常听到的电脑像素是1024x768的,表示的是水平方向是1024个像素点,垂直方向是768个像素点。注意css中的1px并不一定是物理像素的一个像素块,需要根据DPR计算,对应多少物理像素块
设备像素比:dpr = 物理像素 / 逻辑像素(px),例如,iPhone6的dpr为2,物理像素750(x轴),则它的逻辑像素为375
参考物是父元素的font-size,具有继承的特点。如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值。
css3新单位,相对于根元素html(网页)的font-size,不会像em那样,依赖于父元素的字体大小,而造成混乱。
css3新单位,viewpoint width的缩写,视窗宽度,1vw等于视窗宽度的1%。举个例子:浏览器宽度1200px, 1 vw = 1200px/100 = 12 px。
1英寸(inch)=2.54厘米(cm)
手机对角线的长度换算成英寸
屏幕横向和纵向的像素点
1px即代表一个物理像素点/像素块
PPI,是每英寸可以显示的像素点的英文缩写。如果说上面分辨率是一个质量总量的概念,那么,ppi就是密度的概念。我们可以通过屏幕的像素总量除以屏幕大小来计算屏幕的PPI,公式如下:a:横向像素数量,b:纵向像素数量,c:屏幕尺寸(英寸)
1px与多少厘米之间是不能直接划等号的,需要看分辨率。
一般电脑的像素分辨率是72ppi,计算公式: (((1**2 + 1**2)**0.5)/72)*2.54 ,此时1px=0.0498cm,1cm=25px;
很多手机是300ppi,计算公式: (((1**2 + 1**2)**0.5)/300)*2.54 ,此时1px=0.0119cm。
参考链接:
画一条0.5px的线
在继承性上:
一开始针对低版本的浏览器构建页面,满足最基本的功能,再针对高级浏 览器进行效果,交互,追加各种功能以达到更好用户体验,换句话说,就是以最低要求,实现最基础功能为基本,向上兼容。以css为例,以下这种写法就是渐进增强。
一开始针对一个高版本的浏览器构建页面,先完善所有的功能。然后针对各个不同的浏览器进行测试,修复,保证低级浏览器也有基本功能 就好,低级浏览器被认为“简陋却无妨 (poor, but passable)” 可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较 大的错误之外,其它的差异将被直接忽略。也就是以高要求,高版本为基准,向下兼容。同样以css为例,优雅降级的写法如下。
渐进增强,开发时间长,成本高,优雅降级,节约成本,开发周期短。
Web前端5道面试题
腾讯WEB前端笔试题和面试题答案能进入腾讯工作是多少人的梦想,下面我为大家搜集的一篇?腾讯WEB前端笔试题和面试题答案?,供大家参考借鉴,希望可以帮助到有需要的朋友!
一、 耐心填一填!(每空4分,共24分)
1. 为span设置类a与b,应编写HTML代码_________。
2. 设置CSS属性clear的值为_both___________时可清除左右两边浮动。
3. ____li________标签必须直接嵌套于ul、ol中。
4. CSS属性_____margin_______可为元素设置外补丁。
5. 设置CSS属性float的值为___none_________时可取消元素的浮动。
6. 文字居中的CSS代码是____text-align:center________。
二、 精心选一选!(每题4分,共16分)
1. 下列哪个样式定义后,内联(非块状)元素可以定义宽度和高度( C )
A. display:inline B. display:none C. display:block D. display:inheric
2. 选出你认为最合理的定义标题的方法( C )
A. 文章标题
B.
文章标题
C.
文章标题
D. 文章标题
3. br标签在XHTML中语义为( A )
A.换行 B.强调 C.段落 D.标题
4. 不换行必须设置( AC )
A.word-break B.letter-spacing C.white-space D.word-spacing
5. 在使用table表现数据时,有时候表现出来的'会比自己实际设置的宽度要宽,为此需要设置下面哪些属性值( AD )
A. cellpadding=?0? B. padding:0 C. margin:0 D. cellspacing=?0?
三、判断对或错!(每题4分,共24分)
1. CSS属性font-style 用于设置字体的粗细。 ( ? )
2. CSS属性overflow用于设置元素超过宽度时是否隐藏或显示滚动条。 ( ? )
3. 在不涉及样式情况下,页面元素的优先显示与结构摆放顺序无关。 ( ? )
4. 在不涉及样式情况下,页面元素的优先显示与标签选用无关。 ( ? )
5. display:inline兼容所有的浏览器。 ( ? )
6. input属于窗体元素,层级显示比flash、其它元素都高。 ( ? )
;前端面试的H5问题有哪些
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还只是对静态内容加速,
对动态加速效果不好;
而双线对动态加速的效果跟静态是一样的。
前端面试题之解决浏览器兼容性的方案
前端面试的H5问题汇总:
1.HTML5 为什么只需要写 <!DOCTYPE HTML>?
答案解析:
HTML5不基于SGML,因此不需要对DTD进行引用,但是需要DOCTYPE来规范浏览器的行为(让浏览器按照他们应该的方式来运行)而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
2、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
答案解析:
行内元素:a b span img input select strong
块级元素:div ul ol li dl dt dd h1 h2 h3 h4 p 等
空元素:<br> <hr> <img> <link> <meta>
3、页面导入样式时,使用link和@import有什么区别?
答案解析:
1)link属于XHTML标签,而@import是css提供的;
2)页面被加载时,link会同时被加载,而@import引用的css会等到页面被加载完再加载;
3)@import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;
4)link方式的样式的权重高于@import的权重。
4、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?
答案解析:
新特性,新增元素:
1)内容元素:article、footer、header、nav、section
2)表单控件:calendar、date、time、email、url、search
3)控件元素:webworker,websockt,Geolocation
移除元素:
1)显现层元素:basefont,big,center,font,s,strike,tt,u
2)性能较差元素:frame,frameset,noframes
处理兼容问题有两种方式:
1)IE6/IE7/IE8支持通过document方法产生的标签,利用这一特性让这些浏览器支持HTML5新标签。
2)使用是html5shim框架
另外,DOCTYPE声明的方式是区分HTML和HTML5标志的一个重要因素,此外,还可以根据新增的结构,功能元素来加以区分。
5、如何区分 HTML 和 HTML5?
答案解析:
1)在文档类型声明上不同:
HTML是很长的一段代码,很难记住,而HTML5却只有简简单单的声明,方便记忆。
2)在结构语义上不同:
HTML:没有体现结构语义化的标签,通常都是这样来命名的<div id="header"></div>,这样表示网站的头部。
HTML5:在语义上却有很大的优势。提供了一些新的标签,比如:<header><article><footer>
6、简述一下你对HTML语义化的理解?
答案解析:
1)用正确的标签做正确的事情;
2)html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
3)即使在没有样式css情况下也以一种文档格式显示,并且是容易阅读的;
4)搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
5)使于都源代码的人对网站更容易将网站分块,便于阅读维护理解。
7、HTML5的离线储存怎么使用,工作原理能不能解释一下?
答案解析:
localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 数据在浏览器关闭后自动删除。
8、iframe有那些缺点?
答案解析:
1)在网页中使用框架结构最大的弊病是搜索引擎的“蜘蛛”程序无法解读这种页面;
2)框架结构有时会让人感到迷惑,页面很混乱;
9、Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?
答案解析:
1)<!Doctype>声明位于文档中的最前面,处于<html>标签之前。告知浏览器的解析器,用什么文档类型规范来解析这个文档。
2)严格模式的排版和JS运作模式是以该浏览器支持的最高标准运行。
3)在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
4)DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
10、常见兼容性问题?
1)png24位的在IE6浏览器上出现背景;
解决方案是:做成PNG8;
2)浏览器默认的 margin 和 padding 不同。
解决方案是:加一个全局的*{margin:0;padding:0;}来统一。
3)IE6双边距bug:块属性标签float后,又有横行的 margin 情况下,在 IE6 显示 margin 比设置的大。浮动IE产生的双倍距离 #box{float:left;width:10px;margin:0 0 0 100px;} 这种情况下IE6会产生200px的距离。
解决方法:加上_display:inline,使浮动忽略
4)IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性; Firefox下,只能使用getAttribute()获取自定义属性。
解决方法:统一通过getAttribute()获取自定义属性。
5)IE下,even对象有x,y属性,但是没有pageX,pageY属性,但是没有x,y属性;
解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
6)Chrome中文界面下默认会将小于 12px 的文本强制按照 12px 显示
解决方法:可通过加入 CSS 属性 -webkt-text-size-adjust:none;解决
7)超链接访问过后 hover 样式就不出现了,被点击访问过的超链接样式不在具有 hover 和 active ;
解决方法:改变CSS属性的排列顺序:L-V-H-A: a:link{ } a:visited{ } a:hover{ } a:active{ }
11、如何实现浏览器内多个标签页之间的通信?
答案解析:
调用localstorge、cookies等本地存储方式
12、webSocket如何兼容低浏览器?
答案解析:
Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR
13、支持HTML5新标签
答案解析:
1)IE8/IE7/IE6支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还需要添加标签默认的样式;
2)当然最好的方式是直接使用成熟的框架、使用最多的是 html5shim 框架
<!--[if lt IE 9]>
<script> src="/svn/trunk/html5.js"</script>
<![endif]-->
14、如何区分:DOCTYPE 声明\新增的结构元素\功能元素,语义化的理解?
答案解析:
1)用正确的标签做正确的事情;
2)html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
3)在没有样式 CSS 情况下也以一种文档格式显示,并且是容易阅读的;
4)搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利用 SEO ;
5)使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
15、介绍一下 CSS 的盒子模型?
答案解析:
1)有两种,IE 盒子模型、标准 W3C 盒子模型; IE 的 content 部分包含了 border 和 padding;
2)盒模型:内容(content)、填充(padding)、边界(margin)、边框(border)。
16、CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3 新增伪类有哪些?
答案解析:
1)id 选择器(#myid)
2)类选择器(.myclassname)
3)标签选择器(div,h1,p)
4)相邻选择器(h1 + p)
5)子选择器(ul > li)
6)后代选择器(li a)
7)通配符选择器(* )
8)属性选择器( a[rel = "external"])
9)伪类选择器(a: hover, li: nth - child)
17、可继承的样式: font-size font-family color, UL LI DL DD DT
18、不可继承的样式:border padding margin width height
19、优先级就近原则,同权重情况下样式定义最近者为准
20、载入样式以最后载入的定位为准;
解析答案:优先级为: !important > id > class > tag ; important 比 内联优先级高
21、CSS3新增伪类举例:
答案解析:
p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素;
p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素;
p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素;
p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素;
p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素;
:enabled :disabled 控制表单控件的禁用状态;
:checked 单选框或复选框被选中。
22、如何居中div? 如何居中一个浮动元素?
答案解析:
给div 设置一个宽度,然后添加 margin:0 auto 属性;div{width:200px; margin:0 auto; }
23、居中一个浮动元素
答案解析:
确定容器的宽高 宽500 高300的层,设置层的外边距
.div{width:500px;height:300px;margin:-150px 0 0 -250px;position:relative;background:green;left:50%;头:50%}
24、css3有哪些新特性?
答案解析:
CSS3 实现圆角(border-radius:8px;),阴影(box-shadow:10px),对文字加特效(text-shadow),线性渐变(gradient),旋转(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
增加了更多的 css 选择器 多背景 rgba
25、为什么要初始化 CSS 样式
答案解析:
因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的页面显示差异。
当然,初始化样式会对 SEO 有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
最简单的初始化方法是:*{padding:0;margin:0} (不建议)
淘宝的样式初始化:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input,
textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; } table { border-collapse:collapse; border-spacing:0; }
26、display:inline-block 什么时候会显示间隙?
答案解析:
移除空格,使用margin 负值、使用 font-size:0、letter-spacing 、word-spacing
27、使用 CSS 预处理器吗?喜欢哪个?
答案解析:SASS
28、什么是盒子模型?
答案解析:
在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。
29、CSS实现垂直水平居中
答案解析:
一道经典的问题,实现方法有很多种,以下是其中一种实现:
HTML结构:
<divclass="wrapper">
<divclass="content"></div>
</div>
CSS:
.wrapper{position:relative;}
.content{
background-color:#6699FF;
width:200px;
height:200px;
position:absolute; //父元素需要相对定位
top:50%;
left:50%;
margin-top:-100px; //二分之一的height,width
margin-left:
-100px;
}
30、简述一下src与href的区别
答案解析:
href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
31、简述同步和异步的区别
答案解析:
同步是阻塞模式,异步是非阻塞模式。
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
32、px和em的区别
答案解析:
px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。
浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em
33、浏览器的内核分别是什么?
答案解析:
IE: trident内核
Firefox:gecko内核
Safari:webkit内核
Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核
Chrome:Blink(基于webkit,Google与Opera Software共同开发)
2022年前端React的100道面试题的第12题:区分props和state
浏览器兼容性涉及的内容有很多,特别是针对IE浏览器,以下整理出五种常见的浏览器兼容性解决方法。一、样式初始化
由于各大浏览器会有自身的默认样式,并且不尽相同,所以为了尽可能的保证样式的统一性,前端在开发项目之前都会先进行样式格式化,最常见的分为以下几个方面。
1.pandding 值和 margin 值均设置为 0
将html、body、a、li、ol、input、textarea、select、button 等标签的 padding 值和 margin 值设置为 0。
2.html 标签
设置统一的字体,如果使用 rem 单位,则 html 需要设置合适的字号。
3.a 标签
设置统一的颜色,将 text-decoration 属性设置为 none。
4.ol 和 li 标签
list-style 统一设置为 none。
5.input、textarea、select、button 等标签初始化
border 设置为 none;
根据需要设置颜色和背景色。
二、使用不同类型的浏览器内核前缀
1.Chrome(谷歌浏览器) 与 Safari(苹果浏览器) 内核:Webkit (中译无) 前缀:-webkit-
2.IE (IE浏览器) 内核:Trident (中译三叉戟) 前缀:-ms-
3.Firefox (火狐浏览器) 内核:Gecko(中译壁虎) 前缀:-moz-
4.Opera (欧朋浏览器) 内核:Presto(中译迅速) 前缀:-o-
例:
-webkit-border-radius: 10px; / 谷歌浏览器 /
-ms-border-radius: 10px; / IE浏览器 /
-moz-border-radius: 10px; / 火狐浏览器 /
-o-border-radius: 10px; / 欧朋浏览器 /
border-radius: 10px;
1
2
3
4
5
三、针对IE浏览器不同版本的解决方案
1.对于低版本的 IE 浏览器使用 CSS hack( 即给特点前缀)
注:以下符号是写在属性名前面。
兼容 IE6 的 hack 符号:- 或 _
兼容 IE6 、7 的 hack 符号:` ~ ! @ # $ % ^ & * ( ) + = [ ] | < > , . 任意一个符号
兼容 IE6、7、8 的 hack 符号:.
注:以下符号是写在属性值与分号直接,中间不留空格。
兼容 IE8 的 hack 符号:\0/
兼容 IE8、9、10 的 hack 符号:\0
兼容 IE6、7、8、9、10 的 hack 符号:\9
例:
/ hack符号在前 /
_border-radius: 10px; / IE6 /
+border-radius: 10px; / IE6\7 /
.border-radius: 10px; / IE6\7\8 /
/ hack符号在后 /
border-radius: 10px\0/; / IE8 /
border-radius: 10px\0; / IE8\9\10 /
border-radius: 10px\9; / IE6\7\8\9\10 /
1
2
3
4
5
6
7
8
9
2.为不同的版本编写独立的样式,其他浏览器识别不到。
例:大于 IE9 的浏览器使用这个单独的 style9.css 样式
1
2
3
例:只有 IE6 浏览器使用的 style6.css 样式
1
2
3
四、其他特殊样式
1.cursor 属性的 hand 值和 pointer 值
问题:firefox 浏览器不支持 hand 值,但其他浏览器均支持 pointer 值。
解决: 统一使用 cursor 属性的 pointer 值。
2.水平居中
问题:IE8 及IE8 以下版本浏览器不可通过设置 margin:0 auto 实现水平居中。
解决: 可通过设置父级 text-align:center 实现。
3.属性值 “inherit”
问题:IE8 及IE8 以下版本浏览器不支持属性值 “inherit”。
解决:谨慎使用属性值 “inherit”。
五、JS兼容性
1.ES6语法
问题:IE11 不支持箭头函数、class 语法等(报 SCRIPT1002: 语法错误),不支持 Set 和 Map 数据结构(不报错)及 Promise 对象,支持 let 和 const,IE10 及以下不支持任何 ES6 语法。
解决:如果要兼容IE浏览器的项目请使用 ES5 语法或者使用 Babel 进行转换。
2.操作 tr 标签
问题:IE9 及 IE9 以下版本浏览器,不能操作 tr 标签的 innerHTML 属性。
解决:可以操作 td 标签的 innerHTML 属性。
3.Ajax
问题:IE9 及 IE9 以下版本浏览器无法使用 Ajax 获取接口数据。
解决:在使用 Ajax 请求之前设置 jQuery.support.cors=true。
4.event 对象的 srcElement 属性
问题:IE8 及 IE8 以下版本浏览器 event 对象只有 srcElement 属性,没有 target 属性。
解决:obj = event.target?event.target:event.srcElement。
5.DOM 事件绑定
问题:IE8 及 IE8 以下版本浏览器是用 attachEvent() 方法,而其他浏览器是 addEventListener() 方法。
解决:判断 IE 浏览器版本,如果是 IE8 及以下 事件绑定则使用 attachEvent() 方法,注意 attachEvent() 方法的用法,第一个参数为“onclick” 而不是“click”。并且没有第三个参数。
对 props 和 state 设计理解正常的是?A. 它们都是纯 JS 对象。
B. props 只能来自父级,组件本身始终无法设置。
C. 只有在 state 变化触发时,才会触发组件更新渲染。
D. props 是一种将数据从父级传递给子级的方式, state 仅用于交互性,即随时间变化的数据。
A、D
纠错
B. 如果选项是 ” props 只能来自父级,组件本身无法更新。“,那么就是正确的,是不能修改,而非不能设置。一个组件可以有默认的 props,也可以通过 defaultProps 设置默认值。
C. props 和 state 的变化都会触发组件更新渲染 。
它们都是用来保存信息的,这些信息可以控制组件的渲染输出。
而它们的一个重要的不同点就是: props 是传递 给 组件的(类似于函数的形参),而 state 是在组件 内 被组件自己管理的(类似于在一个函数内声明的变量)。
props
默认情况下,组件没有状态。下面是以函数组件为例,最简单的参数:
props 由父组件设置的信息,尽管可以设置默认值,并且不能改变它。
state
主要用于用户的事件状态的管理,它应是一个可序列化的数据。它允许组件进行初始化、更改和使用的“私有”信息。
默认值
从父级组件传入的 props 值,和 state 初始值都会覆盖组件内定义的默认值。
下面是 props 的初始化示例:
下面是 state 的初始化示例:
/uberVU/react-guide/blob/master/props-vs-state.md
/blog/2016/react-state-vs-pros
搜索《考试竞技》微信小程序
今天关于“前端开发面试题及答案”的讲解就到这里了。希望大家能够更深入地了解这个主题,并从我的回答中找到需要的信息。如果您有任何问题或需要进一步的信息,请随时告诉我。