一.css的居中方式
常用:
①文本左右居中:text-align:center
②文本上下居中:line-height
③利用边距:padding: , margin:0 auto;
④按中线对齐:vertical-align:middle
⑤利用定位:position:fixed
top:50%;
left:50%;
二.px,em,rem,%
①它们都是用于设置字体的大小以及盒子的宽高,但是px不会因为浏览器尺寸的改变而改
变,而em和rem会因为浏览器尺寸的变化而变化
②px 是 pixel 的缩写,它的含义是像素的意思,在指定字体大小和元素的宽高的时候使用。
像 素是相对于显示器屏幕分辨率而言的 例:height:200px,
③em是一个相对长度的单位,是相对于当前对象内文本的字体尺寸。如过我们未设置当前文
本 的字体尺寸,那么em就会相对于浏览器的默认字体尺寸 例:width:6.25em;
④rem是CSS3中新增的一个相对单位,它与em的区别在于使用rem为元素设定字体大小时,
仍 然是相对大小,但相对的只是HTML根元素。它的使用非常简单,通过改变根元素的大小
就 可以改变它的值
⑤%和em大同小异,1em=100%
补
默认浏览器1em=16px=100%,即0.625em=10px
三.display的值和作用
none | inline | block | inline-block | list-item | run-in | table | inline-table | table-row-group | table-
header-group | table-footer-group | table-row | table-column-group | table-column | table-cell |
table-caption | inherit
以下常用:
①none: 元素不会显示,而且改元素现实的空间也不会保留。但有另外一个 visibility: hidden, 是
保留元素的空间的。
②inline: display的默认属性。将元素显示为内联元素,元素前后没有换行符。我们知道内联元素
是无法设置宽高的,所以一旦将元素的display 属性设为 inline, 设置属性height和width是没有用
的。此时影响它的高度一般是内部元素的高度(font-size)和padding。
③block: 将元素将显示为块级元素,元素前后会带有换行符。设置为block后,元素可以设置
width和height了。元素独占一行。
④inline-block:行内块元素。这个属性值融合了inline 和 block 的特性,即是它既是内联元素,又
可以设置width和height。
四.路由跳转的方式
①router-link (声明式路由)
②router.push(编程式路由)
③this.$router.push() (函数里面调用)
④ this.$router.replace() (用法同上,push)
⑤this.$router.go(n) ()
五.vue生命周期的理解
组件从创建到销毁的一系列过程叫做组件的声明周期。vue在整个生命周期里面提供了一些函数,
可以在内部实现一些业务逻辑,并且这些函数会在一些特定的场合下去执行。
六.vue数据双向绑定的原理,用了什么设计模式(web高级)
装饰者模式
观察者模式
七.数组去重
①.最基本的去重方法
定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则
存放在新数组中。
function unique(arr){
var res = [arr[0]];
for(var i=1;i<arr.length;i++){
var repeat = false;
for(var j=0;j<res.length;j++){
if(arr[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(arr[i]);
}
}
return res;
}
②先排序在去重
function unique(arr){
var arr2 = arr.sort();
var res = [arr2[0]];
for(var i=1;i<arr2.length;i++){
if(arr2[i] !== res[res.length-1]){
res.push(arr2[i]);
}
}
return res;
}
③利用对象的属性去重
function unique(arr){
var res =[];
var json = {};
for(var i=0;i<arr.length;i++){
if(!json[arr[i]]){
res.push(arr[i]);
json[arr[i]] = 1;
}
}
return res;
}
④利用下标查询
function unique(arr){
var newArr = [arr[0]];
for(var i=1;i<arr.length;i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
return newArr;
}
八.统计字符串中出现最多的字符
function fn(str) {
var hash = {}
for(let i = 0; i < str.length; i++) {
if(hash[str[i]]) {
hash[str[i]]++
} else {
hash[str[i]] = 1
}
}
let keys = Object.keys(hash)
let maxValue = -1, maxKey = ''
for(let i = 0; i < keys.length; i++) {
if(hash[keys[i]] > maxValue) {
maxValue = hash[keys[i]]
maxKey = keys[i]
}
}
console.log(maxKey, maxValue)
}
fn('aaaaaaabbbc')
九.js垃圾回收机制
①标记清除
JavaScript最常见的垃圾回收方式。当变量进入执行环境的时候,比如在函数中声明一个变量,垃
圾回收器将其标记为“进入环境”。当函数执行结束,将其标记为“离开环境”。
②引用计数
引用计数的策略是跟踪记录每个值被使用的次数。当声明了一个变量并将一个引用类型赋值给该变
量的时候,这个值的引用次数就加一。如果该变量的值变成了另外一个,则这个值得引用次数减
一。当这个值的引用次数变为0的时候,说明没有变量在使用,这个值没法被访问。
十.原型、原型链
①原型:
每个函数都有一个prototype(原型)属性,这个属性都有一个指针,指向一个对象,这个对象包含由
特定类型所有实例共享的属性和方法。使用原型的好处是可以让所有对象实例共享原型包含的方法
和属性。利用原型是当前构造函数创建的对象的父类,这个特点我们可以提取对象的公共属性和方
法放在原型中,从程序的视角中具有封装性。
②原型链:
当对象访问属性和方法的时候,会往自身查找,如果没有才会去原型中找。
原型链实现:让原型等于父类构造函数创建的对象
原型链的本质:子类构造函数的
prototype
的
__proto__
指向父类构造器的
prototype
,建立对象之
间的关联