前端面试题总结

118 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

1. HTML5中新增了哪些内容?

广义上的html5指的是最新一代前端开发技术的总称,包括html5,CSS3,新增的webAPI。

Html中新增了header,footer,main,nav等语义化标签,新增了video,audio媒体标签,新增了canvas画布。新增了一些标签属性,例如input的placeholder。

Css3中新增了:圆角,阴影,滤镜,vwvh单位,flex布局,媒体查询,过度和动画,伪类。

webAPI,新增了localStorage和sessionStorage,querySelector,webSocket,requestAnimationFrame,Worker(类似分线程),地理位置。

2. Css中Position定位都有哪些方式,分别是什么效果。

Static(默认), 静态定位,流式布局

Relative,相对定位,参与流式布局,可以使用left等在原有位置上进行位置调整。

Absolute,绝对定位,脱离文档流,相对于另一个元素进行定位。

Fixed,固定定位,脱离文档流,相对于浏览器窗口定位,不随页面滚动而改变位置。

3. Absolute定位的元素相对于哪个元素进行定位。

相对于离自己最近的、position为非static的祖先元素进行定位。

4. 前端页面中动画都有哪些实现方式,各自分别适用于哪些场景?

Transition:简单的动画,只需要在两个状态之间变化的动画。

keyframeAnimation:适合需要在多个状态连续进行的动画。

js动画:功能最强的动画,但是效率最低。

5. 怎么隐藏页面中的某个元素?

Display:none;      隐藏且不占用位置。

Visibility:hidden;   隐藏但保留位置。

6. 怎样实现在动画结束之后执行一段代码?

过度动画:监听transitionend事件。

关键帧动画:监听animationend事件。

Js动画:1,手写js动画时,直接在停止动画的代码之后添加要执行的代码,如果使用js动画工具库(velocity),则把要执行的代码写在动画结束时的回调函数中。

7.怎样得到浏览器窗口的宽度和高度?

clientHeight和clientWidth获取浏览器的可是窗口的高度,不包括滚动条

获取元素在浏览器中的位置:offsetTop和offsetLeft

8. 怎样解决js中回调函数多层嵌套问题 和 多异步任务并发执行问题。

多层嵌套问题:使用promise,使用*函数,使用async+await。

多异步任务并发执行问题:合并promise。

9. Js函数中的this究竟指向谁?怎样改变函数中this的指向。

谁调用,指向谁。构造函数中,this是正在创建的对象。

函数中的this是可以通过方法改变的。

Call ,call是函数对象的方法,作用是指定this,调用这个函数。

apply,和call基本一样,唯一的区别是,传参方式不同,aplly需要提供一个数组。

Bind,bind也是函数对象的方法,作用是生成一个新的函数,新的函数和原函数代码一样,但是里面的this是绑定过的。

10. 浏览器中事件传播的流程是什么?怎样阻止事件的传播?怎样阻止事件的默认行为。

事件触发后,先从根元素到叶子元素逐层捕获,然后再从叶子元素到根元素逐层冒泡。   e.stopPropergation    ,  e.preventDefault

11. 怎样判断一个变量是什么类型的,怎么判断一个对象是属于哪个类的。

Typeof    instanceof

  12. 数组有哪些常用处理方法,字符串、数字有哪些常用处理方法。

数组:join,splice,push,slice,indexof,sort,concat,reverse,map,reduce,some,every,filter,foreach。

字符串:split,indexof,substr,substring,replace,trim,toUppercase,startsWith,

数字:tofixed。

Math:  floor,ceil,round,random,abs,sqrt,pow,max,sin,

13. 怎样实现元素上下左右都居中?

1,实现元素本身内容居中:text-align:center+行高。或flex布局。

2,实现子元素在父元素中居中:绝对定位+上下左右设置0+margin:auto。绝对定位+left,top:50%+transform:translate:-50%。Flex布局。

14. 怎样在不使用新元素的情况下清除浮动?

在浮动元素的父元素上添加一个class,为这个class添加后缀.after样式,其中写content:””;display:block;clear:both

15. 什么是响应式页面,是依赖什么技术实现的。

能够根据不同的浏览器尺寸,显示不同的布局方式。依赖媒体查询实现。

16. 什么是元素盒模型,包含哪几部分?计算元素尺寸时从哪部分开始计算?

元素从结构上分为4层,内容,内间距,边框,外间距。

通过box-sizing设置计算方式,默认为content-box,及计算内容盒,可以设置为border-box,计算到边框盒。

17. 什么是原型和原型链?

Js中的对象都有一个属性叫做__ptoto__(也是一个对象),表示对象的原型。当访问对象中的属性或方法时,首先在对象本身中寻找,如果找不到则会在原型中寻找,原型中也找不到时会在原型的原型中寻找,直到最顶层为止。

js中的类(构造函数)都有一个prototype的属性,表示本类的原型类型,通过这个类实例化的对象(这个构造函数创建的对象), proto__都指向本类的prototype,从而实现了类方法的共享。一个类的prototype也是一个对象,它也有__proto,把它的__proto__指向另一个类的prototype时,那么这个类的对象就能访问另一个类中的方法,从而实现了方法的继承。

A类的prototype.__proto__指向另一个类B,B的prototype.__proto__又可以指向C,这种结构叫做原型链。

  18. 闭包是什么?有什么作用?

当一个函数A的作用域被内部的B函数引用时,A函数的作用域就会被B函数闭包,当A函数执行完毕时,A函数的作用域也不会释放。

闭包可以实现对象的私有属性和私有方法。

闭包可以封装变量,从简减少对全局作用域的污染。

19. ES6中新增加了哪些特性?

箭头函数,字符串模板,let块级作用域声明方式,const常量,class声明类,结构赋值,Promise,ES6模块化。

20. 什么是跨域请求,怎样实现跨域请求。

一个页面发送到非本身来源的请求叫做跨域请求,浏览器只禁止ajax跨域请求。

三种跨域请求的方式:

1,cors,服务器在响应头中添加access control allow origin字段,浏览器在收到请求之后就会认为本次请求时允许跨域的。

2,JSONP,浏览器使用创建script标签的形式发送请求,将一个函数名作为请求参数发给服务器,服务器将需要返回的数据封装在一段js代码中(把前端发来的函数名进行调用,把要发送的数据作为参数),然后把这段代码返回给前端,前端立刻执行这个函数。

3,代理服务器,将请求先发送给代理服务器,代理服务器装发给目标服务器。