1、使用new操作符的时候都做了什么?
(1)先创建一个新对象
(2)将构造函数的作用域赋给新对象
(3)执行构造函数中的代码
(4)返回新对象
2、为什么在vue组件中data都是用一个function返回对象呢?
因为组件可能被用来创建多个实例,如果data是一个纯粹的对象,那么所有的实例都将共享引用同一个数据对象。也就是说如果两个实例同时引用一个data对象,那么当我们修改其中一个实例的属性时,另外一个也会随之更改。所以要用函数模式创建自己的作用域。
3、vue中methods和computed的区别
compued计算属性是将计算属性的方法和data中的值进行绑定,只有当data中的值发生变化的时候才会触发computed方法。
methods是每次进入页面都要执行该方法。
4、位置相关
position: absolute;
top: 50%;
left: 50%;
此种方式是根据屏幕整体的位置进行移动的
transform: translate(50%,50%)
此种方式是根据元素的宽高进行移动的
5、给元素设置display:"inline-block";元素间会有间隙,怎么处理?
1、给元素浮动,间隙就会消失。
2、给元素父级设置font-size:0;间隙就会消失。
3、不要将元素进行换行操作。例如<div></div><div></div>两个div在同一行而不是用回车进行换行也可以消除间隙。
6、vue-Router原理,解释(浅薄)
单页面应用(spa)的核心之一是:更新视图而不重新请求页面。
能实现这一点主要就是通过两种方式:
1、通过改变hash值
2、利用history对象新特性
在vue-Router中,使用mode参数来决定采用哪一种方式。
默认是通过hash的方式,如果浏览器支持history新特性就用history,如果不在浏览器环境则使用abstract。
选好mode后创建history对象(hashHistory或HTML5History或AbstractHistory)
7、前端优化?
1、减少http请求数
2、使用css sprites
3、舍弃@import来引入css而要选择link标签
4、先选择‘离线更新节点’,之后再添加到dom树上
5、不要使用html来缩放图片,用多大的图尽量就让ui切多大的图
6、使用cdn加速
7、静态文件设置Expires永不失效,动态文件用合适的Cache-Control
HTTP头来让浏览器进行条件性的请求
8、sessionStorage 、localStorage 和 cookie 之间的区别
1、cookie数据始终在同源的http中请求携带(即使不需要),单条cookie的存储量不能超过4kb,因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标示。
2、而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
3、数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
4、作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。
9、很多人都答不上的题。
console.log(a);//打印结果:function a(){console.log(10)}
a();//打印结果:10
var a = 3;
function a() {
console.log(10)
}
console.log(a);//打印结果3
a = 6;
a();//报错 a is not a function
//之所以会报错,是因为函数a已经被重新赋值,并不是一个函数了
function a(){
console.log(10);
}
//上面这种方式可以转化为
var a = function(){
console.log(10);
}
//由此可以看出,变量的赋值是比函数的赋值是优先的。
10、面试经常让布局左右定宽中间自适应的布局
<style>
.a{
float:left;
width:200px;
height:200px;
background:green;
}
.b{
float:right;
width:200px;
height:200px;
background:green;
}
.c{
margin:0 200px;
height:500px;
background:yellow;
}
</style>
<div class="a"></div>
<div class="b"></div>
<div class="c"></div>
<style>
.a{
position: absolute;
top: 0;
left: 0;
width: 200px;
height: 500px;
background: yellow;
}
.b{
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 500px;
background: yellow;
}
.c{
margin: 0 200px;
height: 50 0px;
background: green;
}
</style>
<div class="a">左侧div</div>
<div class="b">右侧div</div>
<div class="c">中间div</div>