· 1、标签语义化的意义是什么? o 为了在没有CSS的情况下,页面也能呈现出很好地内容结构、代码结构。 o 用户体验,例如title、alt用于解释名词或解释图片信息、label标签的活用。 o 有利于SEO和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息,爬虫依赖于标签来确定上下文和各个关键字的权重。o 方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页。 o 便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。 · 2、常见的状态码有哪些? o 200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果。 o 202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定。 o 204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息。 o 301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果。 o 304:协商缓存 o 404:请求失败,客户端请求的资源没有找到或者是不存在。 o 500:服务器遇到未知的错误,导致无法完成客户端当前的请求。 o 503:服务器由于临时的服务器过载或者是维护,无法解决当前的请求。 · 3、js的执行机制是什么? o js是单线程执行的,页面加载时,会自上而下执行主线程上的同步任务,当主线程代码执行完毕时,才开始执行在任务队列中的异步任务。具体如下: § 1.所有同步任务都在主线程上执行,形成一个执行栈。 § 2.主线程之外,还存在一个"任务队列(eventloop队列或者消息队列)"。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。 § 3.一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。哪些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。 § 4.主线程不断重复上面的第三步。 · 4、怎么理解的原型和原型链? o 原型:函数都有prototype属性,这个属性的值是个对象,称之为原型。 o 原型链:对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层一层形成的链式结构称为原型链。 · 5、let、const和var的区别? o var声明变量存在提升(提升当前作用域最顶端),let和const是不存在变量提升的情况。 o var没有块级作用,let和const存在块级作用域。 o var允许重复声明,let和const在同一作用域不允许重复声明。 o var和let声明变量可以修改,const是常量不能改变。 · 6、vue组件中的data为什么是函数,new Vue 实例里,data 可以直接是一个对象 ? o 组件是用来复用的,组件中的data写成一个函数,数据以函数返回值形式定义,函数有独立的作用域,这样每复用一次组件,就会返回一份新的data,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。 o 而单纯的写成对象形式,由于对象是引用类型,就使得所有组件实例共用了一份data,就会造成一个变了全都会变的结果。 o 因为new vue根实例不复用,所以可以写成对象形式。 · 7、computed和watch的区别? o 计算属性computed: § 1、支持缓存,只有依赖数据发生改变,才会重新进行计算。 § 2、不支持异步,当computed内有异步操作时无效,无法监听数据的变化。 § 3、如果computed需要对数据修改,需要写get和set两个方法,当数据变化时,调用set方法。 § 4、computed擅长处理的场景:一个数据受多个数据影响,例如购物车计算总价。 o 侦听属性watch: § 1、不支持缓存,数据变,直接会触发相应的操作。 § 2、watch支持异步;监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值。 § 3、immediate:组件加载立即触发回调函数执行。 § 4、deep:true的意思就是深入监听,任何修改obj里面任何一个属性都会触发这个监听器里的 handler方法来处理逻辑。 § 5、watch擅长处理的场景:一个数据影响多个数据,例如搜索框。 · 8、v-if和v-show的区别,使用场景区别? o 区别: § 1.实现原理:v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置DOM元素的display样式,block为显示,none为隐藏; § 2.编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换; § 3.编译条件:v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留; § 4.性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗; o 使用场景: § 基于以上区别,因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。 o v-if判断是否加载,可以减轻服务器的压力,在需要时加载,但有更高的切换开销;v-show调整DOM元素的CSS的dispaly属性,可以使客户端操作更加流畅,但有更高的初始渲染开销。如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。 · 9、Vue 的父组件和子组件生命周期钩子函数执行顺序? o Vue 的父组件和子组件生命周期钩子函数执行顺序可以归类为以下 4 部分: § 加载渲染过程 § 父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted § 子组件更新过程 § 父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated § 父组件更新过程 § 父 beforeUpdate -> 父 updated § 销毁过程 § 父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed
|