1.原型对象,原型链,数据类型,闭包
2.vue原理 ,react基本
3.浏览器渲染过程,https,http缓存
4.数组的方法
5.webpack打包流程和loader,plugin的配置优化
6.js作用域
7.浏览器时间循环
8.事件循环
9.keep-alive生命周期:
1.activated:页面第一次进入的时候,钩子触发的顺序created-mounted-activated
2.deactivated:页面退出会触发deactivated,当再次前进或后退时触发activated
10.keep-alive属性:正则/数组需要v-bind绑定
1.include字符串或正则表达式,只有匹配的组件会被缓存
eg:
//将缓存name为test-keep-alive的组件
[if !supportLists]2. [endif]exclude字符串或正则表达式,任何名称或组件都不会被缓存
eg:
[if !supportLists]3. [endif]max数字,最多可以缓存多少组件实例
11.Vue中计算属性、方法与侦听属性的区别
计量属性computed在使用时,函数里面所有的变量都会被监听,只要里面某一个值变动,便会将整个函数执行一遍
特性:
1. 是计算值
2. 应用:就是简化tempalte里面{{}}计算和处理props或$emit的传值
3. 具有缓存性,页面重新渲染值不变化,计算属性会立即返回之前的计算结果,而不是再次执行函数
而watch只是监听某一个值,若是监听的值里面也有很多变量,也会全部监听
特性:
1. 是观察动作
2. 应用:监听props,$emit或本组件的值执行异步操作
3.无缓存性,页面重新渲染时值不变化也会执行
12.Vue生命周期:(四个阶段,八个钩子函数)
1. 创建阶段(create):beforeCreate(){创建前},created(){创建后}
2. 挂载阶段(Mount):beforeMount(){载入前},mounted(){载入后}
3. 更新阶段(Update):beforeUpdate(){更新前},updated(){更新后}
4. 销毁阶段(destroy):beforeDestroy(){销毁前},destroyed(){销毁后}
13.侦听object数据----定义属性:
Let contact = ‘陈涵’
Object.defineProperty(demo,’name’,{
Enumberable:true,
Configurable:true,
Get(){
Return contact
},
Set(){}
})
14.什么是BFC
BFC:块级格式化上下文,它是指一个独立的块级渲染区域,只有Block-level Box参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。
现象:一个盒子不设置height,内容子元素都浮动时,无法撑起自身,这个盒子就没有形成BFC
形成BFC的办法:(父元素设置)
1.float不是none
2.position的值不是static或者relative
3.display的值是inline-block,flex,inline-flex
4.overflow:hidden(最好的办法)
好处:
1.解决margin塌陷,如图
2.阻止元素被浮动元素覆盖,实用性为0,实际开发中浮动就都浮动,不浮动就都不浮动,否则会脱离文档流。如图:
15.深浅拷贝及symbol
数据存储
1,一般数据类型:number string boolean null undefined symbol (唯一性,修饰的作用,不相等,遍历用reflect.ownKeys(object),symbol.for(), symbol.keyFor() )
symbol实际应用:
2, 引用数据类型:object 数组 set map
第一个打印的是:基本数据类型,第二个打印的是:symbol数据类型,第三个都打印,如下图
赋值和浅拷贝的区别:
1.赋值
浅拷贝需要创建一个新的对象,而赋值不是
结果都是:科比
2.浅拷贝-一般数据类型
没有改变原数据:所以结果是:乔丹,科比
3.浅拷贝-引用数据类型
因为hobby是引用类的数据类型,拷贝的是内存的地址 ,也就指向同一个房间。拷贝前和拷贝后是相互影响的,所以结果都是冰球
4.深拷贝(入过属性是引用数据类型,那么就会开辟一个新房间)
应用场景:组件
16.xss攻击:比如一个神秘的URL没有做转义,加了一个script代码,然后渲染到页面中被执行
1.什么情况下会产生xss攻击:
1,渲染到页面中,以script标签注入,不做转义就会产生xss攻击
2,a链接跳转的时候,即使做了转义也会产生xss攻击,用白名单的方法解决
3,URL以 “javascript:” 开头也会产生xss攻击,用白名单的方法解决,禁止调 “javascript:” 链接、非法scheme等
2.xss分类:
1,存储型xss:(后端数据库)用户在提交数据时,后端没有做过滤,直接存储到后端数据库,最后前端从后端取用数据就会产生xss攻击
2,反射性xss:(URL)
3,DOM型xss:(后端数据库/前端存储/URL)较前两种,DOM型取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞,而前两种属于服务器的安全漏洞。
17.crsf攻击:
18.proxy:代理
1.proxy与Object.defineProperty对比:(vue3废弃Object.defineProperty)
1.监听对象不需要遍历,而Object.defineProperty需要遍历
2.可以监听到新增加的属性,而Object.defineProperty不可以
问题:Object.defineProperty无法监听数组的变化,除了proxy之外还有什么办法可以监听?
答案:默认将数组长度设置为1000,监听0-999的属性变化,如图
2.监听push、shift、pop、unshift等方法:
18.闭包:能够读取其他函数内部变量的函数
实际运用:回调函数
1,作用域:(执行上下文)
1,全局作用域
2,函数作用域
2,call-bind-apply的理解与区别:改变this的指向
3,call,apply区别:传入的参数不一样,call需要穿入逐个的,apply可以传一个数组,如下图:
4,应用:
1.将 伪数组 转化成 数组
伪数组和数组的区别:伪数组看着是数组,但是并没有方法,通过call改变它的指向
答案:
arguments:
数组的拼接:
判断数据类型:
封装一个准确判断数据类型的函数:
function getType(obj){
let type =typeof obj;
if(type != "object"){
return type;
}
returnObject.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
}
区分obj和array:
1.typeof(最低级,最常用,只能判断基本数据类型)
2.instanceof(一般用来判断A是否是B的实例,表达式:A instanceof B 是返回true,不是返回false)
3.constructor
4.Object.prototype.toString.call()
19.构造函数:用来初始化对象的(——construct)
20.原型(prototype)与原型链(_proto_ ; =>[[prototype]])
原型:函数特有
原型链:任何数据都有原型链,如数组,对象,number都是有的
从当前实例属性去查找,如果找到了就返回,否则顺着原型链一层一层往上找,直到找到null为止,如果找到null都没找到,就会报错
21.数组的方法:
join():把数组转换成字符串,eg:
push()和pop():添加到末尾 / 移除末尾,都是返回修改后的长度,eg:
shift() 和 unshift():移除开头项,返回移除的项 / 添加到开头,返回长度,eg:
sort():按字符串排序,按数值排序arr.sort(sortNumber),eg:
reverse():倒叙排序,eg:
concat():将参数添加到原数组,不改变原数组,eg:
slice():根据下标截取数组,组成新的数组,eg:
splice():删除,插入,替换,eg:
indexOf()和 lastIndexOf() (ES5新增):从前往后查找 / 从后往前查找,eg:
forEach() (ES5新增):循环遍历,eg:
map() (ES5新增):返回新数组,不改变原数组,eg:
filter() (ES5新增):过滤,eg:
every() (ES5新增):判断数组中每一项是否满足条件,全部满足返回true,只要有一个不满足即返回false,eg:
some() (ES5新增):判断数组中是否有一项满足条件,有一项满足返回true,全部不满足即返回false,eg:
2.类数组转化为数组:
args = Array.prototype.slice.call(arguments)
22.支付安全问题:非对称,rsa ,一般数字签名,然后sha或md5进行加密
23.箭头函数:没有{},不需要return
1,函数体内的this:
面试题:
2,不可以当做构造函数
3,arguments 是不可以的
4,不可以当做 generator(迭代器)函数
24.ES6快速去重:
let arr = [11,23,45,55,11,23]
let item = [...new Set(arr)]
console.log(item)
25.Promise:
1.构造函数同步执行 -> .then()方法异步执行
26.闭包:
优:1.使用闭包可以通过外部函数访问内部的函数值,提升作用域;2.便于链式调用可重复使用,不会造成全局污染;3.私有性,封装性强,有效防止了命名冲突
缺:1会常驻内存,不会被回收,IE中容易造成内存泄漏,慎用;
1.闭包是什么? ----- 方法里返回一个方法
2.闭包的意义是什么?----- 1.延长变量的生命周期 2.创建私有环境----------项目运行会生成一个临时的变量对象AO(active object),会存储所有的方法以及局部变量,全局变量不会在AO里面
3.作用域链:----- 层层查找,就近原则
4.vue 中 data() 为什么是一个函数? ------ 保证了每一个组件都有一个私有的作用域
27.防抖与节流
1.防抖:=》,在固定的时间内,时间只允许发生一次;
应用场景:1.input框输入自动补全事件;2.频繁的操作点赞或取消点赞之类;3.浏览器窗口大小改变后,只需窗口调整完成后,再执行resize事件中的代码,防止重复渲染;
实现原理:如果在500ms内频繁操作,则每次都会清除一次定时器然后重新创建一个。直到最后一次操作,然后等待500ms后发送ajax
2.节流:=》保证一定时间内只调用一次函数
应用场景:1.提交表单;2.高频的监听事件;
2.还有一种方法就是用时间戳节流
28.Vue2响应式:
短路表达式:
29.MVC与MVVM
1.双向数据绑定:
2.v-if和v-show的区别:
v-if:不满足条件,不会渲染dom =》 单次判断
v-show:隐藏dom =》 多次切换 ------- 不能用于权限操作
30.数据类型:
原始数据类型:String,number,boolean,undefined,null
引用数据类型:数组,对象,函数
存储:
31.栈和堆:
栈:先进后出,自动分配释放
堆:队列优先,先进先出,动态分配空间,一般由程序员分配释放,若程序员不释放,程序结束时可能右OS回收,容易产生内存泄漏
32.js内置对象:
1.值属性,这些全局属性返回一个简单值,这些值没有自己的属性和方法。如:NaN,null,undefined,Infinity
2.函数属性,全局函数可以直接调用,不需要再调用时指定所属对象,结束后会将结果直接返回给调用者。如:eval(),isNaN()
3.基本对象,包括一般对象,函数对象和错误对象。如:Object,Function,Boolean,Symbol,Error
4.数字和日期对象。如:Number,Math,Date
5.字符串。如:String,RegExp
6.可索引的集合对象。如:Array
7.使用键的集合。如:Map,Set,WeakMap,WeakSet
8.矢量集合。如:SIMD
9.结构化数据。如:Json
10.控制抽象对象。如:Promise,Generator
11.反射。如:Proxy,Reflect
12.国际化,为了支持多语言处理而加入 ECMAScript 的对象。如:Intl、Intl.Collator
13.WebAssembly
14.其他。如:arguments
33.diff算法中patch方法:
34.uni-app:
模拟器:夜神模拟器,在电脑模拟真机测试
uni的生命周期:onLaunch(只触发一次),onshow(启动),onHide(前台进入后台),onError(报错)
页面的生命周期: onLoad(加载),onShow(显示),onReady(初次渲染),onHide(隐藏),onUnload(监听页面卸载) ,onResize(窗口尺寸),onPullDownRefresh(下拉刷新),onReachBottm(页面滚动),onTablemTap(点击tab时触发),onShareAPPMessage(分享)
组件的生命周期:beforeCreat(创建前),created(创建后),beforeMount(挂载前),Mounted(挂载后),beforeUpdate(更新前),undated(更新后),beforeDestroy(销毁前),destroyed(销毁后)
条件注释:#ifdef H5/WP-WEIXIN 开始 #endif结束
组件之间传值:
1.父传子:props
2.子传父:$emit
3.兄弟传值:
获取后台数据:
格式化年月日:
35.
36.
37.
38.
39.
40.vue2---->vue3的变化
新特性:
1.以前data 现在setup 然后return出去