1、浏览器的存储方式都有哪些?
- cookie: 优点——兼容性好,请求头自带cookie方便 。缺点——大小只有4k, 请求头加入 cookie 浪费流量(多用于记录登录状态)
- localStorage: 优点—— 操作方便,永久性存储,大小有 5M
- sessionStorage: 会话级别的储存方法,关闭页面会被清理 (仅在当前窗口有效)
- indexedDB: 它是NoSQL数据库,用键值对进行存储,可以进行快速读取操作
2、优化前端的方法:
减少请求数量 (比如: 合并、减少重定向、使用缓存、尽量用字体图标)
减小资源大小 (比如:css压缩,图片压缩等)
优化网络链接 (比如: 使用DNS预解析、并行连接等)
优化资源加载 (比如: 加载位置,加载时机,懒加载和预加载等)
DOM 优化 (比如: Dom 读写分离、节流[throttle]或防抖[debounce]等)
webpack优化(比如:动态导入和按需加载、剔除无用代码、长缓存优化等)
3、git 的常用操作
git add (添加到暂存区)、git clone(下载项目)、git status(查看当前仓库状态)、git commit(提交暂存区到本地仓库)、git push(上传合并)、git pull(下载代码)
4、常见的代码规范
命名规范(语义化、cssBEM 命名法,变量名采用小驼峰等)
变量规范(尽量用let const 定义)
字符串(统一用单引、用字符模板)
函数(尽量使用箭头函数等)
数组(用... 做浅拷贝)
5、前端解决跨域的方法
5.1 jsonp 缺点: 只能发送get 请求
1、
$.ajax({
url: 'http://www.domain2.com:8080/login',
type: 'get',
dataType: 'jsonp', // 请求方式为jsonp
jsonpCallback: "handleCallback", // 自定义回调函数名
data: {}
});
2、
this.$http = axios;
this.$http.jsonp('http://www.domain2.com:8080/login', {
params: {},
jsonp: 'handleCallback'
}).then((res) => {
console.log(res);
})
5.2 CORS 跨域资源共享
5.3 nginx代理跨域(修改webpack.config.js 文件)
6、v-for 中为什么要用key?
key 主要用于DOM diff 算法 ,标志组件的唯一性,为了高效的更新虚拟DOM,
如果不使用 key 默认使用 ‘’就地复用‘’策略
注: 尽量不使用index 作为key ,要用唯一标识的值
7、遍历数组的几种方法?
for()
while
forEach()
every()是否都符合某条件,全部符合就返回true
some()是否存在符合某条件,存在就返回true
filter()过滤数组,返回满足条件的新数组
map() 遍历每一项,对每一项进行操作,并返回新数组
reduce() 常用于初始化一个值
for.. in ... 本意是用来迭代对象,数组也属于特殊对象,所以也可以遍历数组但不推荐
for... of ... 也可以迭代对象。支持return 和break
8、类型
js类型
基本类型:字符串,数字,布尔,null,undefined,symbol (es6 新引用的类型,标识独一无二的值)
引用数据类型: 对象,数组,函数
扩展: 基本类型传递的是值,引用类型传递的是地址,所以引用类型才需要做深拷贝。(地址是可以共享一块内存的,值不可以共享一块内存)
ts 类型
字符,数字,布尔,数组,对象,元组(tuple),枚举(enum),任意(any),null, undefined,void, never , interface(接口)(加粗为ts 新增)
9、css 水平垂直居中的方法有哪些?
1.flex
{display: flex;justify-content:center;align-items:center } 或者{父元素设置display:fliax.子元素设置 margin:auto}
优点: 不需要固定居中元素的宽高。
2.grid
父元素设置 display: grid. 子元素{justify-self:center;align-self:center} 或者子元素设置 {margin: auto}
缺点: 比flex 方法兼容性差一点。优点:不需要固定宽高
3.absolute(定位) (absolute+transform)(absolute+calc)(absolute+ 负margin )(absolute + margin:auto)
{position:absolute;left:50%;top:50;transform:translate(-50%,-50%) }
{position:absolute;left:0;top:0;right:0;bottom:0;margin:auto }
10、vue的组件通讯有哪些?
props(父-子) / $emit(子-父) /ref (子-父) /eventBus (兄弟) / $parent或者$root (兄弟)/vuex / $attrs 和 $listeners (祖先-子孙)
11、浅拷贝和深拷贝的实现?区别?
浅拷贝:只是进行一层复制,深层的引用还是共享,所以原对象和拷贝对象还是会互相影响
实现:赋值、Object.assign()(当对象只有一层是为深拷贝)、展开运算符、
深拷贝: 无限层级的复制,所以原对象和拷贝对象不会互相影响。
实现: 手动复制、object.assign()(只有一层才可用)、转成json 再转回来(最常用JSON.parse(JSON.stringify(obj1)))
12、js 闭包
什么是闭包: 闭包是指有权访问另一个函数作用域里中变量的函数
创建方法: 在一个函数内,创建另一个函数,创建的函数可以访问到当前函数的局部变量
优点:缓存变量,避免变量全局污染
缺点: 会造成内存泄漏
特点: 封闭性(外界无法访闭包内部的数据)、持久性(在外部函数被调用之后,闭包结构仍然存在)
13、js 原型链
14、js继承
15、em 和 rem 的区别
em 相对于父元素
rem 相对于根元素
16、隐藏元素的方式
display:none(不占据空间,页面重新渲染,性能消耗大)/visibility:hidden(占据空间,但是不能触发点击事件,性能消耗较少)/opacity:0(间距空间,并能触发点击事件,性能消耗较少)
17、
18、动画
19、bfc
20、
21、http1.0和2.0的区别
22、同源策略限制内容有哪些
不能读写浏览器缓存、js 无法获取dom 树、不能发送请求
23、vue 和react 的区别(https://worktile.com/kb/ask/19606.html)
响应式原理不同:react 主要通过setStart()方法来更新状态,状态更新后组件也会重新渲染
监听数据变化的原理不同:vue 是
组件写法不同
diff 算法不同
框架本质不同: vue 是 mvvm 由mvc 发展来。react 是前端组件化框架,有后端组件化发展而来。
24、vue 渲染机制
25、箭头函数的优缺点
优点:语法简洁、隐式返回减少代码量、解决了this指向问题(原生的写法,this指向调用者,箭头函数this 绑定的是定义时的那个对象)
缺点: 箭头函数是匿名函数,不能作为构造函数、箭头函数中没有arguments 对象、
跟普通函数的区别:this永远指向其父级对象的this
26、xss 攻击
27、vue 中的data 属性的理解
vue组件中,data 是一个函数,因为组件是复用的,所以每次调用都是一个新的data函数,自己管理自己的数据,互不影响
28、vue 双向绑定原理
vue2 : 使用的是obeject.difineproperty() 中的 set和get 实现数据劫持+ 发布订阅模式
vue3: 使用的是proxy 代理(优点: 直接监听对象、返回的是一个新的对象,有13种拦截方法)
29、兼容问题
不同浏览器标签默认的内外边距不同 解决方法:初始化样式 *{margin:0,padding: 0} 等
图片加a标签,在ie9 中会有边框 解决方法: 设置boder: none
ul li 浮动后,显示在div 外 解决方法:清除浮动clear:both
兼容前缀:谷歌chrome(-webkit-) 火狐(-moz-)ie(-ms-)opera(-o-)
30、w3c 标准的理解
一系列规范和技术标准
31、== 和=== 的区别
== 只要值相同就为true (少用 == 因为没有类型限制,不严格)
=== 严格等于,值,类型都相等才可以。(建议一般用=== 更可靠,)
32、let const var 区别
var: 函数作用域,没有块级的概念,可以垮块访问,不能垮函数
let : 块级作用域,不能跨块,也不能跨函数
const: 块级作用域,不能跨块,并且不能修改
33、const 定义的数组可以修改吗
不可以。因为const 用于常量声明,表示该值不可修改
34、es6 新特性
太多了。需要单独出一篇文章。列举一些常用的
let const, symbol.模板字符串,includes()字符串新方法、解构赋值、...对象扩展符,箭头函数等