1.判断空对象
不能用Object.keys() 来进行判断对象是否为空,因为Object.keys() 获取不到原型上的属性和 Symbol 的属性 ,可以用Reflect.ownKeys(data).length == 0来判断对象是否为空
2.Object.keys()和Reflect.ownKeys()的区别
Object.keys() 获取不到原型上的属性和 Symbol 的属性
3.TS中的void、never、any、unknow类型
void表示没有任何类型 never 表示永远不存在的值 unknow表示 未知类型的
4.如何终止promise
使用AbortSignal API去中断
5.attrs是什么
如果你遇到需要跨很大层级去调用或者传参的时候,可以考虑使用他,或者使用attrs 和$listeners
6.那简单来个闭包,沙箱吧
7.平时调用接口都用axios吧,说说怎么能停止它的调用呢 通过axios.cancelToken去终止请求
const cancelToken=axios.cancelToken
const source=cancelToken.source()
axios.get('[https://www.baidu.com](https://www.baidu.com)',{cancelToken:source.token})
8.浏览器接口请求中,OPTIONS这种请求有什么作用?
浏览器主动发送的OPTIONS请求,用于校验是否存在请求跨域
9.this的指向?
1.在函数体中,非显式或隐式地简单调用函数时,在严格模式下,函数内的this会被绑定到undefined上,在非严格模式下则会被绑定到全局对象window/global上。
2.一般使用new方法调用构造函数时,构造函数内的this会被绑定到新创建的对象上。
一般通过call/apply/bind方法显式调用函数时,函数体内的this会被绑定到指定参数的对象上。
3.一般通过上下文对象调用函数时,函数体内的this会被绑定到该对象上。
4.在箭头函数中,this的指向是由外层(函数或全局)作用域来决定的。
10.http与https的区别?
- HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)都是用于传输Web上数据的协议,它们的主要区别在于安全性和加密方式。
2.HTTP是一种明文协议,数据传输过程中不加密,容易被攻击者窃取和篡改传输的数据。而HTTPS使用SSL/TLS协议对HTTP协议进行加密,使得传输过程中的数据加密,更加安全可靠。
3.在使用HTTPS协议时,服务器会向客户端发送一个证书,证书包含了服务器的公钥,客户端在收到证书后会验证证书的合法性,然后使用服务器的公钥加密数据,
4.再将加密后的数据发送给服务器。服务器使用自己的私钥对数据进行解密,并进行相应的处理- 因此,HTTPS相对于HTTP来说更加安全,适用于需要进行数据加密和保护的场景,例如银行、支付、电子商务等网站。
11.vue的响应式原理?
通过订阅发布模式,observer,watcher,compile,update
1、需要observer的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter
这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化
2、compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,
一旦数据有变动,收到通知,更新视图
3、Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是:
(1)在自身实例化时往属性订阅器(dep)里面添加自己
(2)自身必须有一个update()方法
(3)待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。
4、MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,
最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果。
12.v-model?
v-model指令可以在表单 input、textarea以及select元素上创建双向数据绑定
v-model指令会根据控件类型自动选取正确的方法来更新元素
v-model 本质上不过是语法糖,它负责监听用户的输入事件来更新数据,并在某种极端场景下进行一些特殊 处理