1.src和href的区别 ?
Src是img标签中用来引入图片的方法 Href是a标签中要跳转的地址 Src用来替代这个元,而href用来建立这个标签与外部资源的关系
2.页面元素隐藏方式 和各自特点?
Display:none; 不占用页面空间 Opacity:0; 透明度为0,仍然会占用页面空间 Overflow:hidden; 超出不显示 Visibility:hidden; 仍然会占用页面空间
3.用过哪些盒模型,以及他们各自的区别?
主要区别:宽高的定义不同 标准盒模型:设置的宽就等于内容的宽 box-sizing:content-box; 怪异盒模型:内容的宽 = 设置的宽 - padding的宽 - border的宽 box-sizing:border-box;
4.谈谈你的移动端适配方案有哪些?
百分比布局 响应式布局 Vw/vh布局 Rem布局 弹性盒子布局
5.js 数据类型有几种?它们之间的区别是什么?
基本数据类型,引用(复杂)数据类型 区别: 基本类型在栈内存储,引用类型在堆内存储 不同的neicun分配机制也带来了不同的访问机制 赋值时变量的不同 传递参数的过程不同(把实参赋值给形参的过程)
6.数据类型强制转化和隐式转化的分别怎么使用?
强制转换:强制转换就是手动把数据转成想要的数据类型,但不会改变原变量中存储的数据及数据类型 隐式转换:计算机程序自动完成的转换,但是不会在任何时候都发生,只会在特定的情况下执行
7.let const 和 var 的区别 ?
Var声明变量存在变量提升,即变量可以在声明之前调用,值为:undefined Let const 不存在变量提升,一定要在声明后调用,否则会报错 Var不存在块级作用域 Let const存在块级作用域 Var允许重复声明 Let const在同一作用域不允许重复声明 Var let 可以修改声明的变量 Const声明一个只读的常量,一旦声明常量的值就不能修改
8.箭头函数和普通函数的区别 ?
外形不同:箭头函数使用箭头(=>)定义,普通函数没有 箭头函数都是匿名函数:普通函数可以有匿名函数和具名函数,但是箭头函数都是匿名函数 箭头函数不能用于构造函数,不能使用new。普通函数可以用于构造函数,以此创建对象实例 箭头函数的this指向不同,箭头函数没有自己的this,他的this是声明时所在的上下文的this,在普通函数中this总是指向调用他的对象
9.解释什么叫回调地狱 以及怎么解决回调地狱 ?
回调地狱的意思通俗点讲就是回调函数在调用回调函数,从而使之进入一个死循环,这就形成了所谓的回调地狱,而想 要解决这一方法就只有使用ES6新增的promise方法
10.说明原生ajax的实现步骤?
Var xhr = new XMLHttpRequest() Xhr.open(‘get’,请求的网址,async(同步异步)) Xhr.send() Xhr.onreadystatechange=()=>{ If(this.readystate == 4 && this.status == 200){ 成功 }else{ 失败 } }
11.什么情况下会导致跨域?
跨域,指的是浏览器不能执行其他网站的脚本。 它是由浏览器的同源策略造成的,是浏览器 施加的安全限制。 同源策略:所谓同源是指:协议,域名,端口均相同。 即便两个不同的 域名指向同一个ip地址,也非同源。
12.Vue生命周期有哪些方法,分别有什么作用,简单说明
创建前:Beforecreate 实例已经初始化,但不能获取DOM节点。(没有data,没有el) 创建后:Created 实例已经创建,仍然不能获取DOM节点。(有data,没有el) 挂载前:beforemount 模板编译完成,但还没挂载到界面上。(有data,有el) 挂载后:Mounted 编译好的模板已挂载到页面中(数据和DOM都已经渲染出来)。 更新前:beforeupdate 数据发生变化立即调用,此时data中数据是最新的,但页面上数据仍然是旧的(检测到数据更新时,但DOM更新前执行)。 更新后:Updated 更新结束后执行,此时data中的值和页面上的值都是最新的。 销毁前:beforedestroy 当要销毁vue实例时,在销毁之前执行。 销毁后:Destroyed 在销毁vue实例时执行。
13.使用vue中的v-for时,为什么要绑定 :key? 如果不绑定会有什么效果?
v-for默认使用就地复用策略,列表数据修改的时候,他会根据key值去判断某个值是否修改,如果修改,则重新渲染这一项,否则复用之前的元素,如果不绑定key的话,每次修改某一条数据,都会重新渲染所有数据,会导致大量内存的浪费。如果绑定了key,每次修改某一条数据的时候,就只会重新渲染改条数据的变化,节省了大量的内存。
14.v-show 和 v-if 的作用和区别, v-bind 和 v-model的作用和区别?
v-show和v-if的作用:控制元素的显示与隐藏 v-show切换元素的didplay属性none隐藏block显示 用来控制元素显示隐藏初始化会渲染 适用于频繁切换显示隐藏元素不能在template上使用 简单基于css的切换 v-if通过DOM是否存在来控制组件显示隐藏 初始化不会渲染 不适用于频繁切换显示隐藏的组件,能在template上使用 切换过程中合适地销毁和重建 使用场景不同: if 多用于需要判断数据 从而整体删除一个标签时 (不频繁切换显示状态) show 多用于通过判断数据来处理标签的显示时 (频繁切换显示状态) v-bind 和 v-model相同点: 用来绑定数据到标签中,符合数据驱动视图 v-bind:单向绑定,绑定数据,属性和表达试,缩写为":" 只负责数据显示的标签 v-model双向绑定,主要用于表单中 同时负责数据显示和收集的标签
15.vue 组件通信如何实现,至少列举3种方式并说明各自的局限性?
父组件通过v-bind绑定一个自定义的属性,子组件通过props接收父组件传来的数据; 子组件通过$emit触发事件,父组件用on()或者在子组件的自定义标签上使用v-on来监听子组件触发的自定义事件,从而接收子组件传来的数据。 ref如果在普通Dom元素上使用,引用指向的就是 DOM 元素;如果在子组件上使用,引用 就指向组件实例,可以通过实例直接调用组件的方法和数据
16.详细说明vue组件中 data ,computed 和 watch的区别?
data:Vue 实例的数据对象。Vue 将会递归将 data 的 property 转换为 getter/setter,从而让data 的 property 能够响应数据变化。对象必须是纯粹的对象 (含有零个或多个的 key/value对) Computed:是一个计算属性具有依赖性只执行一次就拿出来调用下一次获取computed的值时才会重新计算 Watch: 是调用一次执行一次如果监听数据变化都会执行回调
17.keep-alive的作用是什么? 使用它的目的是什么?
keep-alive是vue内置的一个组件,而这个组件的作用就是能够缓存不活动的组件,我们能够知道,一般情况下,组件进行切换的时候,默认会进行销毁,如果有需求,某个组件切换后 不进行销毁,而是保存之前的状态,那么就可以利用keep-alive来实现 字符串或正则表达式。
18.vue-router的作用是什么? 为什么不使用a标签?
vue-router:动态路由,用于跳转页面,另外vue-router还可以实现页面间传参等其他功能 这是因为用Vue做的都是单页应用(当你的项目准备打包时,运行 npm run build 时,就会 生成dist文件夹,这里面只有静态资源和一个index.html页面),所以你写的<a></a>标签是不起作用的,你必须使用vue-router来进行管理
19.vuex 是什么? 怎么使用?为什么用使用它?
为处理复杂的组件通信,所以使用的一种状态管理模式 它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 state 数据源,载体 getters 用于改变state的值,派生出多个数据源 mutation 唯一可以提交可以改变state的状态,也就是数据的属性值 actions 提交的是mutation,用commit提交 而不是直接变更状态,可以包含任意异步出操作 modules 拆分成多个模块 vuex就是将数据共享给多个组件共同使用,同时也将这个数据的状态进行了共享(一个组件改变这个数据的状态其它组件也跟着改变)
20.请谈一下你对 使用原生js开发和 使用vue开发的看法。
原生js 面向浏览器编程,需要写很多兼容性代码 操作dom更繁琐,复杂交互需要频繁操作dom,且代码不够友好 可扩展性和可维护性没有保证 团队协作困难 开发效率低下 vue 1)优点 : 基于MVVM 实现的数据驱动视图,解放了DOM操作 View 与 Model 分离处理, 降低代码的耦合度 2)缺点: 当双向绑定时,Bug调试难度增大 大型项目中,View和Model过多,维护成本过高