面试问题小结

1.for in 和for of
for in 是遍历对象 且会遍历原型链
for of可以遍历 数组 对象 字符串且不会遍历原型链

2.hash 和history
hash路由在地址栏url中有# 且#后的内容不会包括在http请求中,所以对后端没有影响
实现的原理:原生的hasChange事件来实现,来监听hash值的变化
window.onhaschange=function(){}
刷新页面的时候:不会去发送请求,页面不会有任何问题,不需要后端来配合
history没有#
实现的原理:利用的是history的api 来实现的 popState() 来实现的
刷新页面的时候:会去发送请求然后会导致页面出现找不到的情况,需要后端来配合解决
进行页面刷新 hash路由会加载到对应的页面 history回去请求相应的接口 所以会报404
hash支持低版本浏览器 history是h5提出的 不会

3.promise
promise是es6提出的异步编程的解决方案 从理解上说 promise相当于一个盒子 里面放着未来会发生的事 从语法上说primise是一个对象 接受一个函数为参数 这个函数接受2个参数 一个已成功 一个已失败 promise是解决了回调地狱的问题(回调套回调)可以用peomise.then promise.catch方法采用链式写法

4.vue响应式
vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 数据劫持,来劫持各个属性的setter,getter,在数据更新时发布消息给订阅者,触发相应监听回调。

当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty() 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。

vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),

5.route和router
r o u t e r 是 v u e R o u t e r 的一个对象,通过 V u e . u s e ( v u e R o u t e r ) 得到的一个市里对象,是一个全局对象,它包括所有的路由像 router是vueRouter的一个对象,通过Vue.use(vueRouter)得到的一个市里对象,是一个全局对象,它包括所有的路由 像 routervueRouter的一个对象,通过Vue.use(vueRouter)得到的一个市里对象,是一个全局对象,它包括所有的路由像router.push()有历史记录 ,本质是添加一个history记录
$router.replace没有历史记录
$route是一个跳转对象 每一个路由都有一个route对象 是一个局部对象 可以获得对应name path params quary

6.typeOf和incetanceof
typeof str // “string” 字符串
typeof num // “number” 数值
typeof array // “object” 对象(可以和函数区别开)
// 👆注意,数组也是一个对象
typeof date // “object” 对象
typeof func // “function” 函数
typeof symbol // “symbol”
返回的是一个字符串 返回的是一个布尔值
判断基本数据类型 判断引用数据类型
arr date返回的是obj

7.this.$nextTick()
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM
8.跨域
浏览器同源策略规定 协议 域名 端口 三者相同 有一个不同即为跨域

9.原型链
当js试图得到一个对象的属性时,会先去这个对象的本身去寻找,如果这个对象本身没有找到这个属性,那么js就会去它构造函数的’prototype’属性中去寻找,也就是去’proto‘中寻找,如果’prototype’属性本身中依旧没有找到,’prototype’中依旧有一个‘proto’。
原型可以解决什么问题:
对象共享属性和方法
谁有原型:
函数拥有:prototype
对象拥有:proto
对象查找属性或者方法的顺序:
先在对象本身查找–>构造函数中查找–>对象的原型中查找–>构造函数的原型中查找–>当前原型中查找
原型链的最顶端是null

10.webpack
webpack工作原理:webpack可以看作是一个打包机:分析项目结构 找到js模块及浏览器不能够直接运行的扩展语言(ts less sass等)将其转换为合适的格式共浏览器使用

webpack详解

11.new操作符干了什么
创建一个空对象
将构造函数的原型链接到新建对象原型上
使用apply改变this指向 将构造函数的this绑定到新创建的对象上
返回新对象

12.单向数据流
指数据总是从父组件传递到子组件,子组件无权更改,否则会报错,首先如果更改了,那么其它依赖于该父组件的子组件也会出错,其次就是如果子组件更改了父组件的数据的话,那么父组件就不知道是哪个子组件更改了数据,从而出bug,正确的做法就是通知父组件要更改数据,然后父组件更改完数据之后再传递给子组件

17 21 25
axios ajax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值