1.let const var 的区别
1.let const 有块级作用域,var不存在块级作用域
2.var可以重复声明同名变量,后面的会覆盖前面的,而let const 不能重复声明同名变量
3.let const在未声明变量之前不可使用,存在暂时性死区,var则存在变量提示,声明的变量会提升到当前作用
域的顶部
4.let var 可以先声明不赋值,也可以赋值后修改,const必须声明时设置初始值,且不能修改
2.localStorage,sessionStorage,cookie 的区别
1.大小不同 localStorage 和sessionStorage 大小为5mb或更大 cookie大小不能超过4kb
2.cookie会在浏览器和服务器之间来回传递,localStorage和sessionStorage不会把数据发送给
服务器,仅在本地保存
有效期不同,localStorage只要不删除,永久有效,sessionStorage在浏览器窗口关闭之前有效,cookie在设置的过期时间之前有效,即使浏览器关闭
-
作用域不同,localStorage和cookie在所有的同源窗口中共享 ,sessionStorage不在不同的浏览器窗口共享,即使是同一个页面
localStorage 一般用于用户数据缓存 sessionStorage 一般用于敏感账户,比如银行账号登录
cookie一般用于判断用户是否登录,每次发送请求都会携带
3.基本数据类型和引用数据类型,怎么判断 ,null和undefined的区别
基本数据类型:number string boolean undefined null typeof判断 null为object 判断值为类型
复杂数据类型:function object array instanceof判断 判断值为true和false 通过Array.isArray来区别
对象和数组
es7新增可以同时判断基本数据类型和引用数据类型的方法
object.property.toString.call
null 为 声明并赋值了 值为空对象
undefined 为声明了未赋值
null== undefined 但是不全等于
4.作用域和作用域链
作用域: 变量或者函数所能作用的范围
作用域链:当我们使用一个变量时,会在当前作用域的变量对象中查找,如果没有找到,就会从父级的作用域
变量对象中查找,一直到全局作用域的变量对象中,这样由多个作用域的变量对象构成的链就是作用域链
5.重绘与回流
页面加载时,浏览器会将html标签还有js动态创建的元素解析成一个dom树,
dom 树 加上 css样式结合形成render 树
重绘: 当 渲染树中一些元素需要更新属性,这些属性只影响外观状态,而不影响布局的,就称之为重绘
回流:渲染树中因为元素的尺寸,布局或者隐藏发生改变需要重新构建时,就称之为回流,每个页面最少有一次回流,在页面第一次加载时,因为要构建渲染树,在回流时,浏览器会使渲染树中受到的影响的部分失效,并重新构建这部分渲染树,完成回流后,浏览器会重新绘制这部分到页面中,也就是重绘。
重绘不一定会引起回流,回流一定会引起重绘
6.es6新增语法,并说明使用场景
- let const
- 箭头函数
- 解构
- 模板字符串
- 拓展运算符
- promise async await
- for of
- set map
- class
7.什么是闭包
闭包本质上是将函数内部和函数外包连接,使函数外部可以使用函数内部的变量
能够读取其他函数内部变量的函数就是闭包
闭包会使得函数中的变量始终都保存在内存中,使用多的话会影响网页性能,也有可能导致内存泄漏,一般都是
在函数退出之前,将不使用的局部变量全部删除
8.深拷贝和浅拷贝
浅拷贝就是只复制引用地址,而不复制真正的值,深拷贝是对目标的完全复制,连值一起复制了
浅拷贝一般用拓展运算符,深拷贝使用json中的parse和stringify 或者使用递归 递归就是自己引用自己,有结束的条件
9.this指向
普通函数中,this指向window 严格模式下,this指向undefined
构造函数中,this指向创建的对象
方法声明中,this指向调用者
定时器中,this指向window
事件中,this指向事件源
10.数组方法及数组去重
- map 遍历数组并将新的数据返回一个新数组
- filter 过滤 遍历数组 返回符合条件的所有数据
- every 遍历数组 检测每一个元素是否都符合条件 是返回true 否返回false
- some 遍历数组 检测数组中是否有元素符合条件,只要有一个符合就不在遍历,返回true,否则返回false
- forEach 遍历数组,可以对每一个元素进行操作
- for of 遍历输出每一个元素的值
- find 遍历数组 找到数组中符合条件的元素,找到返回元素本身,找不到返回undefined
- findindex 遍历数组 找到数组中符合条件的元素的下标,找到返回下标,找不到返回 -1
- 数组去重 es6 set去重 es5 for嵌套for
11.for in 和for of 的区别
for in 遍历的是对象的key值 或者数组的下标
for of 遍历的是对象的value 值,或者数组的元素
12.call apply bind 的区别
-
js 防抖和节流 使用场景
防抖是设置一个时间,在触发事件n秒后再执行这个函数的回调,如果在这个时间段内再次触发,就会重新计时,类似于回城
节流是在一个时间段内只能触发一次函数,多次触发,只执行一次 类似于大招
-
原型和原型链
每个引用数据类型都有一个proto属性,每一个函数都有一个prototype属性,所有引用类型的proto属性指向它的构造函数的prototype属性,这是是原型
当访问一个对象的属性时,会从这个对象的本身属性去查找,如果没有找到,就会去它的proto属性上查找,也就是它的构造函数的prototype属性上查找,如果还没找到 ,就会继续去查找prototype属性,这样一层一层的往上找,形成的一个链式结构,就是原型链
-
同步和异步
同步和异步一般是指方法的调用
同步是指一旦开始调用之后,就必须等方法调用返回之后,才能执行下面的代码
异步是指一旦开始调用,方法会立即返回,可以执行后面的代码
常用的异步有定时器和调用接口
-
跨域及解决方法
jsonp
cors
跨域代理
-
node和webpack了解
node是基于v8引擎的js运行环境
webpack是一个前端构建工具,打包
-
promise
异步编程的一种解决方案,解决回调地域问题
三种状态
-
mvvm
m是数据模型 v是视图
vm是核心 视图模型
mvvm模式就是将前端的视图和后端的数据进行双向绑定,当一方改变另一方随之而改变
- Object.defineProperty 和 Proxy 的区别
- vue2生命周期及其使用场景
-
vue组件传值
父传子 props
子传父 $emit
兄弟传值 eventBus
跨层级 传值 provide inject
常用vuex
-
v-if和v-show的区别
v-if是根据判断条件来动态的创建销毁元素
v-show是根据判断条件动态显示隐藏元素
如果判断为false时,v-if不会创建,而v-show无论为什么,都会渲染
频繁切换使用v-show
-
v-if为什么不能和v-for一起使用
在vue2中v-for优先级高于v-if 所有需要先循环再判断,会消耗许多性能
先判断再渲染
-
vue的key值作用
v-for的 key值主要作用是提升性能,当我们对数据进行修改时,重新全部渲染会很耗费性能,而key值的出现就避免了这个问题,v-for采用了就地更新的策略,当数据修改时,它会根据key值判断某一个值是否发生改变,如果改变就重新渲染这个值,如果没有,就可以复用之前的值,v-for中key一般为id
vuex
路由的跳转和传参方式
toute的区别
怎么监听路由信息
nexttick
pinia 和 vuex
vite和webpack
vue3和vue2的区别
ts语法规范
小程序 uniapp 生命周期
小程序登录流程
小程序跳转方式
小程序支付流程
封装的方法
开发流程和人员结构
js事件循环机制
js继承
动态组件,动态路由,权限管理