2023年6月21日发(作者:)

前端基础练习题菜鸟部分1. get,post区别2. 状态码说⼏个?3. Cookie、sessionStorage、localStorage,IndexedDB的区别,容量,查询索引,同步异步4. HTML5新特点 语义化,本地存储,多媒体,图形,3D的⽀持,离线应⽤5. es6新特点,扩展运算符,let const Symbol 箭头函数(Arrow Functions)有特别有⽤的解构 Promises 函数参数默认值 类,实际上是语法糖6. css3新特点,增添了border和background的属性,对图形操作的属性,动画,flex布局,还有新增了⼀些伪类7. 在地址栏⾥输⼊⼀个URL,到这个页⾯呈现出来,中间会发⽣什么?即树的解析,DOM,CSSOM,渲染树,在dom树的构建过程中如果遇到JS脚本和外部JS连接,则会停⽌构建DOM树来执⾏和下载相应的代码8. CSS盒模型?9. link标签和import标签的区别10. ⽔平居中的⽅法,垂直居中的⽅法,flex,绝对定位+transform,margin auto,display inline block,text-align center11. 了解重绘和重排吗?12. 使元素消失的⽅法有哪些?13. 说⼀下闭包14. 说⼀下类的创建和继承(ype = (ype);),原型链15. 异步,promise(then的链式写法),async16. 前端的事件流,事件委托17. clientHeight,scrollHeight,offsetHeight ,以及scrollTop, offsetTop,clientTop的区别?18. apply,call,bind19. typeof,instantof,基本数据类型20. let,var,const,死区21. vue的⽣命周期,总共分为三个阶段:初始化、运⾏中、销毁。挂载数据,绑定事件等等,然后执⾏created函数,编译模板为虚拟dom进⾏渲染,渲染出真实dom,然后执⾏mounted钩⼦函数,当组件或实例的数据更改之后,会⽴即执⾏beforeUpdate,利⽤diff算法进⾏对⽐之后重新渲染,22. 操作DOM的必要基本函数 parentNode,contains()Array push() length 注意不是函数 pop()(2,0,“Lemon”,“Kiwi”); index, 要删除的多少个,后⾯的是要添加进去的,真奇怪(0) 浅拷贝数组 splice(0)清空原数组slice(start,end):从已有的数组中返回选定的元素。括号内有两个参数,第⼀个参数为start,第⼆个参数为end。对原数组对象不产⽣任何影响。(arr2)bool indexOf(var) 不存在返回-123. 常⽤标签及其属性24. 常⽤css25. http发送报头与相应报头中期部分:26. 清除浮动的⽅法27. 两个动画的详细信息,要会写出来28. this,在JavaScript中,this通常指向的是我们正在执⾏的函数本⾝,或者是指向该函数所属的对象(运⾏时)29. ⼿写bind,返回⼀个函数,⾥⾯⽤(),也就是说,apply返回的是这个构造函数返回的obj,构造函数返回obj,或者说,该返回什么,就返回什么30. ⼿写new,分三步,创建⼀个{},赋予__proto__,⽤constorucor的apply,返回31. ⼿写闭包,「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是⼀个闭包。那么这个代码区域执⾏完之前,外层的那个变量肯定不能被释放,其实很好写32. prototype JS中所有的东西都由Object衍⽣⽽来, 即所有东西原型链的终点指向ypeprototype实际上就是为了减少代码的33. js垃圾回收,内存泄漏⼤致了解,⼀般来说没有被引⽤的对象就是垃圾,就是要被清除, 有个例外如果⼏个对象引⽤形成⼀个环,互相引⽤,但根访问不到它们,这⼏个对象也是垃圾,也要被清除。⼀种算法是标记 标记-清除 算法34. websock⼤致了解,为什么是长连接的35. 强制缓存和协商缓存有什么区别?36. 事件循环机制Eventloop⼤致了解(1)所有同步任务都在主线程上执⾏,形成⼀个执⾏栈(execution context stack)。(2)主线程之外,还存在⼀个"任务队列"(task queue)。只要异步任务有了运⾏结果,就在"任务队列"之中放置⼀个事件。(3)⼀旦"执⾏栈"中的所有同步任务执⾏完毕,系统就会读取"任务队列",看看⾥⾯有哪些事件。那些对应的异步任务,于是结束等待状态,进⼊执⾏栈,开始执⾏。(4)主线程不断重复上⾯的第三步。偏难怪:37. ⾃⼰实现⼀个vue38. redis39. 熟练运⽤localStorage,IndexedDB40. 有个特别的元素,⼀个是p⼀个是a,p是块元素,但是其不能包含除了它本⾝之外的任何块元素,a是内联元素,但是它可以包含除了它本⾝外的任意块元素冒泡事件很多,个⼈觉得记住常见的不⽀持冒泡事件就可以了有:①focus②blur③mouseenter④mouseleave⑤load⑥unload⑦resizeHTML⾏内元素你注意,label,select,textarea(多⾏⽂本框)HTML5 提供两种新对象,通过 javascript API 来存储本地数据,Web Storage实际上由两部分组成:sessionStorage与localStorage。sessionStorage⽤于本地存储⼀个会话(session)中的数据,这些数据只有在同⼀个会话中的页⾯才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是⼀种持久化的本地存储,仅仅是会话级别的存储。localStorage⽤于持久化的本地存储,除⾮主动删除数据,否则数据是永远不会过期的。什么是会话cookie,什么是持久cookie?1》会话cookie:是⼀种临时的cookie,它记录了⽤户访问站点时的设置和偏好,关闭浏览器,会话cookie就被删除了2》持久化cookie:存储在硬盘上,不同的操作系统,不同的浏览器存储的位置不⼀样,不管浏览器退出,或电脑重启,持久cookie都存在。持久cookie有过期时间。get、post的区别,此题⽐较简单,但⼀定要回答的全⾯最⼤的区别就是⽤法不同,get是获取数据,post是发送数据最⼤的不同是get传参⽅式是通过地址栏URL传递,是可以直接看到get传递的参数,post传参⽅式参数URL不可见,get把请求的数据在URL后通过?连接,通过&进⾏参数分割。post将参数存放在HTTP的包体内传递数据是通过URL进⾏传递,对传递的数据长度是受到URL⼤⼩的限制,URL最⼤长度是2048个字符。post没有长度限制请求的记录会留在历史记录中,post请求不会留在历史记录请求只URL编码,post⽀持多种编码⽅式后退不会有影响,post后退会重新进⾏提交请求可以被缓存,post不可以被缓存只⽀持ASCII字符,post没有字符类型限制你所知道的http的响应码及含义?此题有过开发经验的都知道⼏个,但还是那句话,⼀定要回答的详细且全⾯。1xx(临时响应)2xx(成功)3xx(重定向)4xx(请求错误)5xx(服务器错误)100: 请求者应当继续提出请求。101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备进⾏切换。2xx(成功)200:正确的请求返回正确的结果201:表⽰资源被正确的创建。⽐如说,我们 POST ⽤户名、密码正确创建了⼀个⽤户就可以返回 201。202:请求是正确的,但是结果正在处理中,这时候客户端可以通过轮询等机制继续请求。3xx(重定向)300:请求成功,但结果有多种选择。301:请求成功,但是资源被永久转移。303:使⽤ GET 来访问新的地址来获取资源。304:请求的资源并没有被修改过4xx(请求错误)400:请求出现错误,⽐如请求头不对等。401:没有提供认证信息。请求的时候没有带上 Token 等402:为以后需要所保留的状态码。403:请求的资源不允许访问。就是说没有权限。404:请求的内容不存在。5xx(服务器错误)500:服务器错误。501:请求还没有被实现。alt是html标签的属性,⽽title既是html标签,⼜是html标签属性。title标签这个不⽤多说,⽹页的标题就是写在这对标签之内的。title作为属性时,⽤来为元素提供额外说明信息。例如,给超链接标签a添加了title属性,把⿏标移动到该链接上⾯是,就会显⽰title的内容,以达到补充说明或者提⽰的效果。⽽alt属性则是⽤来指定替换⽂字,只能⽤在img、area和input元素中(包括applet元素),⽤于⽹页中图⽚⽆法正常显⽰时给⽤户提供⽂字说明使其了解图像信息。JSH5使⽤ getCurrentPosition() ⽅法来获得⽤户的位置 但是由于隐私设置你是没法在浏览器⾥直接测试的Date() 返回当⽇的⽇期和时间。 getDate() 从 Date 对象返回⼀个⽉中的某⼀天 (1 ~ 31)。 getDay() 从 Date 对象返回⼀周中的某⼀天(0 ~ 6)。 getYear() 从 Date 对象以四位数字返回年份。 getTime() 返回 1970 年 1 ⽉ 1 ⽇⾄今的毫秒数。oundColor = ‘red’; // 这是没问题的ound-color = ‘red’; // 这是错的,浏览器看不懂啊…[“background-color”] = ‘red’; // 这也是可以的export和export default的区别?使⽤上的不同export default xxximport xxx from ‘./’export xxximport {xxx} from ‘./’es6新特性let const Symbol 箭头函数(Arrow Functions)有特别有⽤的解构 Promises 函数参数默认值 类,实际上是语法糖var有⼀个问题,就是定义的变量有时候会成为全局变量。let所声明的变量,只在let所在的代码块内有效。const声明的变量是常量,不能被修改;类似于Java中的final关键字。因此⼀定要声明时赋值。在ES6中,为字符串扩展了⼏个新的APIincludes(“xxx”):返回布尔值,表⽰是否包含xxxstartsWith(“xxx”):返回布尔值,表⽰是否以xxx开头endsWith(“xxx”):返回布尔值,表⽰是否以xxx结尾Promise所谓Promise,简单来说就是容器,⾥⾯保存着某个未来才会结束的事件(通常为异步操作)的结果。从语法上说,Promise是⼀个对象,它可以获取异步操作的消息。Promise提供统⼀的API,各种异步操作都可以⽤这样的⽅式进⾏处理。resolve, reject相当于return,⽤于then使⽤。const promise = new Promise(function (resolve, reject) { // 执⾏异步操作 if (/*异步操作成功*/){ // 调⽤resolve,代表Promise将返回成功的结果 resolve(value) }else { // 调⽤reject,代表Promise将返回错误的结果 reject(error) }})如果想⽤等到promise异步操作执⾏完成,做⼀些事情,可以通过promise的then()⽅法来实现:(function(value)){ // 异步执⾏成功后的回调}如果想要处理Promise异步执⾏失败的事件,还可以跟上catch:(function(value)){ // 异步执⾏成功后的回调}.catch(function(error)){ // 异步执⾏失败后的回调}Set和MapES6提供了Set和Map的数据结构。SetSet本质与数组类似。不同于Set中只能保存不同的元素,如果元素相同会被忽略。和Java中的Set集合⾮常相似。构造函数:let set = new Set();(1); // [1]let set2 = new Set([1,2,3,4,5]) // [1,2,3,4,5]⽅法:// 添加,元素内容不可重复,重复会被忽略()// 清空()// 删除指定元素,删除的是元素内容,⽽不是下标(value)// 判断指定元素是否存在(value)// 遍历h(function(){})// 元素个数pMap本质是与Object类似的结构。不同在于Object强制规定key值只能是字符串。⽽Map对象的key可以是任意对象:object是集合map是集合构造函数:// map接收⼀个数组,数组中的元素是键值对数组const map = new Map([ ['key1','value1'], ['key2','value2']]);// 或者接收⼀个setconst set = new Set([ ['key3','value3'], ['key4','value4']]);const map1 = new Map(map);const map2 = new Map(set);⽅法:(key,value)()(key)(key)h(function(key,value){})()()s()for(let key of ()){ (key);}(...())class(类)的基本语法JavaScript的传统⽅法是通过构造函数定义并⽣成对象。ES6中引⼊了class的概念,通过class关键字⾃定义类。基本⽤法:类的继承:Generator函数generator是ES6提供的⼀种异步编程解决⽅案,语法⾏为与传统函数完全不同。Generator函数有两个特征function命令与函数名之间有⼀个*****号函数体内部使⽤yield语句定义不同的内部状态⽤法:可以看到,通过hello()返回的hi对象,每调⽤⼀次next()⽅法返回⼀个对象,该对象包含了value值和done状态。知道遇到return关键字或者函数执⾏完毕,这个时候返回的done状态为true,表⽰已经执⾏完毕。for…of循环通过for…of可以循环遍历Generator函数返回的迭代器。⽤法:在html中通过标签打开⼀个链接,通过 标签的 target 属性规定在何处打开链接⽂档。如果在标签中写⼊target属性,则浏览器会根据target的属性值去打开与其命名或名称相符的 框架或者窗⼝.在target中还存在四个保留的属性值如下,_blank 在新窗⼝中打开被链接⽂档。_self 默认。在相同的框架中打开被链接⽂档。_parent 在⽗框架集中打开被链接⽂档。_top 在整个窗⼝中打开被链接⽂档。framename 在指定的框架中打开被链接⽂档。 的⽤法 返回的是创建当前窗⼝的那个窗⼝的引⽤,⽐如点击了上的⼀个链接⽽打开了,然后我们打算在上输⼊⼀个值然后赋予上的⼀个id为“name”的textbox中,就可以写为:mentById(“name”).value = “输⼊的数据”;CSS可以继承的属性很少,只有颜⾊,⽂字,字体间距⾏⾼对齐⽅式,和列表的样式可以继承。这么来记很轻松的呀!不要被下边的吓到了哦~所有元素可继承:visibility和cursor。内联元素可继承:字体相关终端块状元素可继承:text-indent和text-align。列表元素可继承:list开头的外联:使⽤link标签引⼊外部的css⽂件。 内联:在head标签中使⽤style标签。 嵌⼊:在标签中使⽤style属性。表⽰红⾊有若⼲种⽅法:颜⾊名:red百分数:rgb(100%, 0%, 0%)数值:rgb(255, 0, 0)⼗六进制:#FF0000简写的⼗六进制:#F00positon:1、static(静态定位):默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。2、relative(相对定位):⽣成相对定位的元素,通过top,bottom,left,right的设置相对于其正常(原先本⾝)位置进⾏定位。可通过z-index进⾏层次分级。  3、absolute(绝对定位):⽣成绝对定位的元素,相对于 static 定位以外的第⼀个⽗元素进⾏定位。元素的位置通过 “left”, “top”,“right” 以及 “bottom” 属性进⾏规定。可通过z-index进⾏层次分级。4、fixed(固定定位):⽣成绝对定位的元素,相对于浏览器窗⼝进⾏定位。元素的位置通过 “left”, “top”, “right” 以及“bottom” 属性进⾏规定。可通过z-index进⾏层次分级。@supports (display: flex) { div { display: flex; }}@supports not (display: flex) { div { float: right; }}注释:如果浏览器⽀持display:flex属性的话,那么div的样式就是display:flex,如果浏览器不⽀持display:flex属性的话,那么div的样式就是display:right@supports (display: flex) and ( box-shadow: 2px 2px 2px black ) {/⾃⼰的样式/}注释:如果浏览器⽀持display:flex和box-shadow的属性,就执⾏⾥⾯⾃⼰的样式“or”和“and”混⽤,在@supports中“or”和“and”混⽤时,必须使⽤括号()来区分其优先级@supports ((transition-property: color) or (animation-name: foo)) and (transform: rotate(10deg)) {/*⾃⼰的样式 */}在css中我们使⽤media标签来区分调⽤哪个css样式,⽐如使⽤media="print"来表⽰当执⾏打印⽂档时,使⽤样式。这样使得⽂档更有得于打印,如将页⾯宽度增宽、或屏蔽掉⼀些不需要打印的内容。默认为media=“all”。也就是说,替补呗。所有浏览器都⽀持media标签,但and or not写法除IE678 以为的浏览器都⽀持CSS代码 @media all {

body{ font:12px; width:100%;}

}

@media print {

body{ font:14px; width:595px;} /*

⽤于打印时将宽度设置为595px(A4) */

} css⽔平、垂直居中的写法,请⾄少写出4种?⽔平居中⾏内元素: text-align: center块级元素: margin: 0 automargin:0 auto=margin:0 auto 0 auto,表⽰上下为0,左右为auto;⾸先如果想要设置居中,width是必须设置的,如果不设置width元素,那么块级元素⼀定会占据100%的宽度,auto是指平分剩余空间,⽐如宽度为200,⽗元素的宽度为1000,那么auto就是指⽔平⽅向平分剩余的宽度(1000-200)/2,auto实际上是说,⾃动平均分配。margin-left: auto;就表⽰仅左边分配所有的剩余空间,也就是跑到右边去了,实现了float:left;的效果。垂直⽅向不可以margin: auto 0,margin:auto=margin:auto auto auto auto,即上下左右都automargin:0 auto=margin:0 auto 0 auto,表⽰上下为0,左右为auto;position:absolute +left:50%+ transform:translateX(-50%)绝对定位元素相对的元素是它最近的⼀个祖先,该祖先满⾜:position的值必须是:relative、absolute、fixed,若没有这样的祖先则相对于body进⾏定位。偏移值由其top、bottom、left、right值确定。translate()函数是css3的新特性.在不知道⾃⾝宽⾼的情况下,可以利⽤它来进⾏⽔平垂直居中.。 translate(-50%,-50%) 作⽤是,往上(x轴),左(y轴)移动⾃⾝长宽的 50%,以使其居于中⼼位置。display:flex + justify-content: center⾸先flex是⽔平布局,另外jc这个能够区分开,嗯。垂直居中设置line-height 等于heightline-height是⼀个长度,⽽不同于top,当font-size等于line-height时,⾏距 = line-height - font-size = 0;⽽当font-size⼤于line-height时,则会出现⾏距为负值,则两⾏重叠,也就是说,line-height是有必要空⽩的height(因为包括⾏距)。在没有设置div的height属性时,div的⾼度根据line-height的⼤⼩⽽变化,且⽂字垂直居中。height = line-height时字体就会居中对齐。height>line-height时,字体上浮,可以理解为没有填充完,还有空位,height,

,

,
,