js:
- setTimeout时间延迟为何不准?
单线程,先执行同步主线程,再执行异步任务队列。 - 如何判断变量的类型?
instance of 用于检测构造函数的原型是否出现在某个实例函数的原型链上
typeof 对于原始类型(除了Null)是可以检测到的,但是引用类型就统一返回object
Object.prototype.toString
3深拷贝和浅拷贝的区别?如何实现?
JSON.stringify与JSON.parse可以实现深拷贝,
就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象
为什么JavaScript是单线程?
假定JavaScript同时有两个线程,
一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?
所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,
3.js实现继承得方法有那些
通过原型链继承
call 继承
\ 拷贝继承
实例继承
组合继承
例举3种强制类型转换和2种隐式类型转换?
强制(parseInt,parseFloat,number) 隐式(== ===)
- ”==”和“===”的不同
答案:前者会自动转换类型,再判断是否相等
后者不会自动类型转换,直接去比较
null和undefined的区别?
4.new操作符都做了些什么
创建一个空对象
将空对象的proto属性指向构造函数的原型
将this指向这个对象
返回这个对象
5.平时工作中数组去重的方法?
object key 得唯一性
indexOf
new Set() 成员值的唯一性
- webpack 性能优化
2: 如何利用webpack来优化前端性能 或者说性能上的优化?
比如用大UI框架按需引入,
使用css-loader 压缩 代码 减小css体积
清除没必要的插件,减小打包体积
cdn 加速
图片小于 多少K的转成base64
图片懒加载
比如vue 单页面前进刷新,后退不刷新
去除开发中 日志打印
7.promise那三种状态
pending(进行中)、fulfilled(已成功)和rejected(已失败)
有了 promise对象 有什么优缺点吗?
优点 1.可以将异步操作 以同步操作的流程表达出来 避免层层嵌套
2.提供了统一的接口,使得控制异步操作更加容易
缺点 一旦建立就会立即执行,无法中途取消,不设置回调函数 内部抛出错误不会反应到外部
当处于pending(进行中)状态时,无法得知目前的进展到哪一个阶段
vue
- 说说 SPA (single page application ) 单页面的理解,它的优缺点分别是什么?
用户体验好,内容改变时候不需要加载整个页面,避免不必要的重复渲染和跳转
基于上面一点 single 相对于服务器压力小
前后端职责分离,架构清晰
缺点: 初始加载耗时, seo难度较大: 由于所有的内容都在一个页面中动态替换显示 所有 seo有着天然的劣势
2.vue-router有哪几种导航钩子?
是全局导航钩子
组件内钩子
单独路由独享组件
3.v-show 与 v-if 有什么区别?
v-if 与 v-for 的优先级
当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级;所以不一般不能用于同一个标签上
每一次判断都需要遍历整个数组,将会十分影响性能
所以在实际开发中,我们会先判断再循环
路由跳转传参 params 和 query 的区别
、接收参数的方式不同
==>this.route.query
2、query的方法传参url路径会显示传递的参数
3、params刷新页面会丢失参数
4、params是用name属性,query是用path属性来编写传参地址
是同态的向dom树内添加或者删除dom元素
编译过程中 v-if 是真正的条件渲染,因为它会确保在切换过程中条件快内的事件监听器和子组件
合适地销毁和重建内容, 也是 惰性的, 如果在初始化渲染时条件为假,则什么也不做,
直到条件第一次变为真时,才会开始渲染条件快
v-show 不管初始化条件是什么元素总是会被渲染,并且只是简单的基于css的 display 属性进行切换
4 .分别适用在什么场景?
所以v-if适用于运行时很少改变条件,不需要频繁切换条件的场景, v-show 适用于频繁切换条件的场景
5.组件中的data为什么是一个函数?
未什么组件中的data必须是一个函数,然后return一个对象,而new Vue实例里,data可以直接是一个对象?
因为组件是用来复用的, js 的对象是引用关系,如果组件中的data是一个对象,这样作用域没有隔离,子组件中的
data属性值会互相影响 ,而new Vue的实例 是不会被复用的,因此不存在引用对象的问题
6.Vue 是如何实现数据双向绑定的?
1.创建一个监听器 对数据对象进行遍历 利用 object.defineProperty 对属性加上 getter 和setter
给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化
2.实现一个订阅器 主要订阅 监听器中属性变化的信息 当收到属性值发生变化消息时,触发解析器
3.解析器呢解析vue模板将模板中的变量替换成数据,渲染页面,添加监听数据的订阅者,一旦数据发生改变,
收到通知,调用更新函数进行更新
- Vue 中的 key 有什么作用?
8 你有对 Vue 项目进行哪些优化?
- vue3.0和vue2.x的区别
监测机制的改变
遇到过哪些难点?怎么解决的?做过哪些优化?
node
为什么node.js require() 加载模块是同步而不是异步呢?
1.一个作为公共依赖的模块,自然要一步加载到位
2.另一方面由于模块的个数往往有限,且node会自动缓存已经 加载的模块,在加上都是本地的文件,
产生的I/O开销基本可以忽略
遵守了 common JS标准
for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值
箭头使用箭头函数,不过以下几种情况避免使用
1.定义对象的方法
2.定义原型上的方法
3.作为事件的回调函数