#JavaScript
1.什么是原型链
一个对象a调用方法的时候,会先从自身找有没有这个方法,如果没有就找自己的原型,看有没有该方法,没有就继续找对象a的父类b,看有没有该方法,没找到就找b的原型,就这样一级一级往上找,称之为原型链,任何一级找到就直接调用,不在往上找,如果到最后都没有找到就报错
2.什么是闭包
闭包是指一个函数可以访问另一个函数作用域中的变量,函数内部嵌套函数,内部函数使用外部函数的变量,在内部函数导出外部函数的变量,可以让其他函数使用这个变量。
3.cookie、sessionStorage、localStorage的区别是什么
都可以用来存储数据,Cookie一条数据大小不能超过4kb,最多不能存储超过20条,如果没有设置过期时间,那么在浏览器关闭后消失,sessionStorage是会话存储,一条大小不能超过5m,存储数量没有限制,关掉页面数据就消失,localStorage是本地存储,一条大小不能超过5m,数量没有限制,除非主动删除,否则数据就不会消失。
4.JSONP的作用是什么,原理是什么
作用:解决跨域问题,原理:动态创建script标签,没有同源策略,支持跨域请求。
5.Call、Apply、bind的区别
1、都可以改变this指向2、Call后面的第一个参数是指向的对象,第二个参数是往对象传递的值3、Apply后面的第一个参数是指向的对象,第二个参数是数组,数组里面是往对象传递的值4、Call和Apply更改this指向都会自动调用,而bind需要手动调用
6.什么是冒泡和挖洞
当一个子标签触发某一个事件(比如click),该事件会从顶级父标签一级一级往改标签传递,这个过程叫做挖洞,当找到该子标签的时候叫做目标阶段,然后事件会从子标签开始一级一级往父标签传递,这个过程叫做冒泡。
7.==和===的区别
==判断左右两边的值是否一致,但是只能判断值,不能判断类型,也就是说'2'==2是成立的,===即判断值,也判断类型
8.JavaScript的强制转换和隐式转换
parseInt、parseFloat、number 这三种是隐式转换,==是隐式转换
9.Typeof和instance of的区别是什么
Typeof判断对象的类型 返回值有6中可能
instance of判断是否是对象的实例化对象 返回值为 true 或者 false
10.JavaScript当中的Typeof返回的类型有哪些
String、Boolean、Number、undefind、function、Object
11.JavaScript基本数据类型有哪些
基本类型undefind、Null、Boolean、String、Number、复杂类型Object
12.Get请求和Post请求的区别是什么
get请求将参数放在url地址当中,post请求将参数放在请求体当中,理论上post更加安全,因为url长度大小不能超过1kb,而get请求又将参数放在url当中,所以进行上传头像等操作不能使用get请求
13.JavaScript当中的事件委托是怎么回事
用事件冒泡的原理,让自己所触发的事件,让他的父级元素代替执行
14.同步和异步的区别是什么
同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。
异步的思想是:将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。
15.for in 和 for of 的区别
for in 循环出来的是key值而for of 循环出来的是value,for in 可以遍历对象而for of 不可以遍历对象,但是两个都可以遍历数组。
16.promise
Promise异步才做有三种状态:pending(进行中)、fulfilled(已成功)、和rejected(以失败)除了异步操作的结果,任何其他操作都无法改变这个状态
17.什么是虚拟DOM
当你用原生js 或 jquery等库去操作DOM时,浏览器会构建DOM树开始讲整个流程执行一遍,所以频繁操作DOM会引起不需要的计算,导致页面卡顿,影响用户体验,而virtual DOM能很好的解决这个问题。它用JavaScript对象表示virtual node(VNode),根据VNode计算出真实DOM需要做的最小变动,然后在操作真实DOM节点,提高渲染效率。
18.ES6的新特性
变量声明由var加上了let和const
箭头函数、展开运算符、解构、模板字符串
19.less和sass的区别
less: 是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量、继承、运算、函数。Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行。
** 是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,函数等),更容易阅读。**
20.常用的指令修饰符
- .once 只执行一次
- .prevent 阻止默认事件发生
- .stop 停止父标签的事件传递
21.面向对象的三大特征
封装、继承、多态
1.将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;2.隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;3.对类的属性和方法增加 访问权限控制。
主要体现是实现代码的 重用,相同的代码不需要重复的编写;子类可以在父类功能上进行重写,扩展类的功能。
多态是指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为。即 不同类的对象调用相同方法,产生不同的结果。
22.DOM和BOM的区别
BOM 浏览器对象模型
Browser Object Model(浏览器对象模型),提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本,对Cookie的支持,IE还扩展了BOM,加入了ActiveXObject类,可以通过js脚本实例化ActiveX对象等等)
用来获取或设置浏览器的属性、行为,例如:新建窗口、获取屏幕分辨率、浏览器版本号等。 比如 alert();弹出一个窗口,这属于BOM
DOM 文档对象模型
Document Object Model(文档对象模型),DOM是针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。DOM本身是与语言无关的API,它并不与Java,JavaScript或其他语言绑定。
DOM是Document ,简称文档对象模型。是用来获取或设置文档中标签的属性,例如获取或者设置input表单的value值。document.getElementById("").value; 这属于DOM
23.递归和迭代的区别
递归:重复调用函数自身实现循环称之为递归,递归实际上不断的深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,没深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时堆栈开销,所以有可能导致堆栈溢出的错误。但是递归变成所体现的思想是人们追求简洁,将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机
迭代:利用变量的原值推出新值称为迭代,或者说迭代是函数内某段代码实现循环,
两者关系:所有迭代可以转换为递归,但是递归不一定可以转换为迭代
深拷贝和浅拷贝
#HTML+CSS
1.css3新增属性
增加了transition渐变、animation动画、选择器、阴影、弹性布局flex、媒体查询等等
2.html5新特性
新增了语义化标签如header、footer等,新增了视频(video)、音频(audio)标签,新增了拖拽API、新增了地理定位,新增了canvas和svg绘图
3.W3C标准有哪些
标准分为三个层面,结构(html)、行为(js)、标签(css)
4.浏览器怎么做兼容
谷歌一般在属性前面加上-webkit来进行兼容
火狐浏览器加上-moz进行兼容
IE浏览器一般使用Css Hack方式来解决,即在代码前面加上、_、+等符号*
5.平时是怎么做适配的
通常的方案是通过rem配合媒体查询来进行适配的,标签或者文本设置大小的时候不设置px而是设置rem,然后使用媒体查询根据屏幕大小来动态调整rem大小,那么所有设置rem单位的元素都会根据屏幕发生改变。
使用百分比加媒体查询
市容flexbox解决方案
固定一个某些宽度,使用一个模式,加上少许的媒体查询方案
6.rem和em有什么区别
em是相对于父级标签的字体大小来定义的
rem是相对于html标签的字体大小来定义的
7.什么是子选择器,什么是后代选择器
>表示子选择器,列如div>span 获取div的子标签span
空格表示后代选择器, 列如div span 获取div里面的所有的span
8.Canvas和svg有什么区别
都可以用来绘制图形,但是canvas是基于js来绘制的,sbg是基于xml来绘制的
#Vue的面试题
1.v-if 和 v-show有什么区别
v-if当值为true,元素添加,值为false,元素删除
v-show当值为true,元素显示,值为false,为元素添加了一个display:none属性
2.data为什么必须是为函数
确保每一个组件独享一个数据对象,而不是共享一个数据对象
3.template标签的作用
将元素包裹在一起,本身并不会加载到DOM结构当中
4.v-text和{{}}相比有什么好处
在网速不好的时候数据返回迟钝的情况下,页面不会出现{{}}
5.watch和computed的区别是什么
Watch监听属性,一旦属性值发生改变立马调用
Computed计算属性,一旦构成属性的任意一块内容发生改变立马重新计算,需要一个返回值
6.什么是MVVM
M model数据模型,为当前页面显示的数据 数据层
V view 视图层
VM viewModel 监听数据变换,用户交互的内容,实质就是一个视图控制器,是数据层和视图层的桥梁,数据与视图分离
7.Vue生命周期钩子函数有哪些
- beforeCreate 组件创建之前
- Created 组件创建之后
- beforeMount 组件渲染之前
- Mounted 组件渲染之后
- beforeUpdate 组件更新之前
- Updated 组件更新以后
- beforeDestroy 组件摧毁之前
- Destroyed 组件摧毁以后
- Activated 组件激活
- Deactivated 组件未激活
8.Vue怎么进行双向数据绑定,双向数据绑定的原理是什么
使用v-model进行双向数据绑定的
原理:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter在数据变动时发布消息给订阅者,触发相应监听回调。当吧一个普通JavaScript对象传给Vue实例在作为它的data选项时,Vue将遍历它的属性,用Object.defineProperty将它们转为getter/setter。用户看不到getter/setter,但是在它内部让它们Vue追踪依赖,在属性被访问和修改时通知变化。
9.Vue之间之间数据传递的方式有几种,怎么进行传递
父传子:子组件通过props方式接受
子传父:子组件发射一个时间$emit,父组件接受事件以后调用相应的函数
非父子:使用一个空的Vue对象在第一个组件的点击事件中,使用on来接受事件。
10.Vue-Router 的钩子函数有哪些
全局守卫
- beforeEach 全局前置守卫
- beforeResolve 全局解析守卫
- afterEach 全局后置守卫
独享守卫
- beforeEnter
组件内守卫
- beforeRouteEnter(该守卫没有this)
- beforeRouteUpdate
- beforeRouteLeave
11.Vue当中的状态管理的作用 以及属性的作用是什么
Vue状态管理是为了统一管理页面所需要的的数据,并能够在整个项目当中任意的地方来使用这个数据,有5个属性
- State:用来存放初始数据
- Mutations:同步方法,用来修改state值
- Actions:异步方法
- Getters:类似于组件当中的computed属性
- Modules:用来管理其他的Vue对象
12.什么是动态组件?
根据is属性的值来决定成为什么组件
13.什么是异步组件
路由加载的时候不会立马加载,等到需要使用的时候才加载的组件称之为异步组件
14.Vue项目当中怎么解决跨域问题
在build/index.js当中设置proxyTable属性,如果脚手架为3.0以上版本,则需要新建一个vue.config.js文件进行配置
路由传参的三种方式
<router-link to='需要跳转到的页面的路径> 最简单的跳转方式
this.$router.push({ path:’/user’}) 常见的路由传参
this.$router.replace{path:‘/’ }