实现一个小盒子在另一个大盒子里面水平垂直居中
方法一:弹性盒子
.box1 {
width: 100%;
height: 500px;
background-color: pink;
/* 方法一:flex弹性盒子 */
display: flex;
justify-content: center;
align-items: center;
}
.box2 {
width: 200px;
height: 200px;
background-color: skyblue;
}
方法二:绝对定位
.box1 {
width: 100%;
height: 500px;
background-color: pink;
position: relative;
}
.box2 {
width: 200px;
height: 200px;
background-color: skyblue;
/* 绝对定位 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
方法三:弹性盒子,外边距自动
.box1 {
width: 100%;
height: 500px;
background-color: pink;
display: flex;
}
.box2 {
width: 200px;
height: 200px;
background-color: skyblue;
margin: auto;
}
js有几种类型
两种:简单数据类型和复杂数据类型
简单数据类型包括:Number、String、Boolean、Null、 Undefined、Symbol(ES6)
引用数据类型包括:数组,对象,函数
简单数据类型与引用数据类型的区别
简单数据类型包括:Number、String、Boolean、Null、 Undefined、Symbol(ES6)
引用数据类型包括:数组,对象,函数
区别:简单数据类型是直接按值存放在栈中,也可以直接按值访问;复杂数据类型是存放在堆里的对象,它在栈中存放的是堆里面的引用地址,访问也是访问引用地址,不是直接访问值。
堆和栈的区别
栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内存,大小不定也不会自动释放。
深浅拷贝以及实现深浅拷贝的方法
深拷贝:拷贝数据,改变旧对象的数据的时候,新对象的数据不会改变
浅拷贝:拷贝引用地址,改变旧对象的数据的时候,新对象的数据也会跟着改变
实现深拷贝的方法: 1. JSON.parse(JSON.stringify()) 2. 递归for-in 3. jQuery $.extend() 4. _.cloneDeep()
实现浅拷贝的方法: 1. 剩余(扩展)运算符 2. concat() 3. Object.assign() 4. slice()
防抖和节流
防抖和节流都是为了阻止某项操作高频触发
防抖是让用户多次触发,只生效最后一次,适用于只需要一次触发生效的场景
防抖应用场景:表单里的按钮,用户点击过快,发送多次请求节流是让用户的操作,每隔一段时间触发一次,适用于多次触发要多次生效的场景
节流应用场景:监听滚动事件
事件循环
同步任务和异步任务分别进入不同的执行"场所"; 同步任务进入主线程,异步任务进入Event Table并注册回调函数。
当指定的事情完成时,Event Table会将这个函数移入任务队列(task quene),等待主线程的任务执行完毕;
当栈中的代码执行完毕,执行栈(call stack)中的任务为空时,就会读取任务队列(task quene)中的任务,去执行对应的回调;
如此循环,就形成js的事件循环机制(Event Loop)。
new操作符做了那些事情?
开辟一个内存存放新创建的对象--创建实例对象
将构造函数里的this指向实例对象
给实例对象新增属性和方法
隐式的返回了实例对象
如果后台没做分页,没传size和pagination,给你传一万条数据,你怎么优化性能
先按照需求前端自己实现分页,设置查看更多啥的
闭包
闭包是指一个内部函数了引用外部函数的局部变量。闭包延长了外部函数的局部变量的作用域。
rem和em的区别
rem和em都是相对单位,rem是相对于html根元素;em是根据父元素或者祖先元素,也会受自己的影响。
css常用选择器
基本选择器:元素选择器(div),id选择器(#),类选择器(.),通配符选择器(*)
复合选择器:交集选择器,并集选择器(,)
关系选择器:后代选择器(空格),子代选择器(>)
属性选择器
伪类选择器(:link,:hover,:focus,:visited)
js有哪些内置对象
常用的有:Math对象,Date对象,Array对象,String对象等
隐藏元素有几种方法
visibility:hidden (占空间)
display:none(不会占用空间)
opacity:0 (占空间,透明度为0)
宽高设为0,然后再overflow:hidden
var,let,const的区别
let和const是es6新增的用于声明变量的特性
const是声明常量,不可更改
var可以重复声明,let和const不可以重复声明
var有变量提升和预解析,let和const没有
let和const具有块级作用域,var没有
this关键字的指向你是怎么理解的?具体有哪些情况?
1.独立的函数中的this指向window
2,对象的方法中的this指向该对象
3,事件处理函数中的this 指向事件源(绑定事件元素)
4,构造函数中的this指向new创建的空对象
5,定时器中的this指向window
6.箭头函数中的this指向上下文中的this
列举数组的遍历方法并简述用法,最少5个
foEach——遍历数组
map——指定条件处理数组元素,返回由处理过后的元素组成的新数组
filter——筛选出满足指定条件的数组元素,返回满足条件的元素组成的新数组
some——判断数组中的元素是否满足指定条件,只要有一个满足就返回true
every——判断数组中的元素是否满足指定条件,只要有一个不满足就返回false
什么是跨域?如何解决跨域?
指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
jsonp script标签不受同源策略的限制。可以动态生成script标签,通过回调函数的形式获取到接口中的数据,缺点是:只能用于get请求
Cors 跨域资源共享 app.all(‘*’)
使用反向代理服务器nginix,服务器通信不受同源策略限制
get和post的区别
1.效率
GET的意思是『得』,从服务器获取数据(也可以上传数据,参数就是),效率较高
POST的意思是『给』,但可以向服务器发送数据和下载数据,效率不如GET
2.缓存
GET 请求能够被缓存,默认的请求方式也是有缓存的
POST请求默认不会缓存
3.安全性
GET的所有参数全部包装在URL中,明文显示,且服务器的访问日志会记录,非常不安全
POST的URL中只有资源路径,不包含参数,参数封装在二进制的数据体中,服务器也不会记录参数,相对安全。所有涉及用户隐私的数据都要用POST传输
4.数据量
HTTP协议中均没有对GET和POST请求的数据大小进行限制,但是实际应用中它们通常受限于软硬件平台的设计和性能。
GET:不同的浏览器和服务器不同,一般限制在2~8K之间,更加常见的是1k以内
POST方法提交的数据比较大,大小靠服务器的设定值限制,PHP默认是2M(具体的话大家以后看后端给的开发文档就行了)