引用类型和基本类型的差别
基本数据类型:string,number,null,Boolean,undefined,symbo
引用数据类型: Object,Array,Function
区别:基本数据类型保存在栈里面,可以直接访问他的值,引用数据类型保存在堆里面,栈里面保存的是地址,通过栈里面的地址去访问堆里面的值
== 和 ===区别,分别在什么情况使用
- = : 一个等号为赋值操作
- == :二个等号为判断,判断的是值是否相等,相等返回 true,不等返回 false
- ===: 三个等号为全等,判断的是值和类型是否相等,相等返回 true,不等返回 false
深拷贝浅拷贝的区别?
浅拷贝:拷贝基本数据类型为他的值,拷贝引用数据类型为地址,生成新的数据,修改新的数据会影响原数据,实际开发常用的方法有:object.assgin,扩展运算符等等
深拷贝:在内存中开辟一个新的栈空间保存新的数据,修改新数据不会影响到原数据,开发中常用的方法有:loadsh 中的_.cloneDeep()方法,JSON.stringify()
- 浅拷贝是拷贝一层,属性为对象时,浅拷贝是复制,两个对象指向同一个地址
- 深拷贝是递归拷贝深层次,属性为对象时,深拷贝是新开栈,两个对象指向不同的地址
说说你对作用域链的理解
作用域一般可以理解为函数或变量的生效范围,我们一般把作用域分成全局作用域,函数(局部)作用域,块级作用域,列如我们在 a 函数中定义了一个变量,那么当我们在 js 中访问这个变量他就会在当前作用域进行查找,如果访问不到,他会一层一层向外进行查找,整个逐级向上查找的过程我们称为作用域链.
什么是防抖和节流?有什么区别?如何实现?
防抖和节流是性能优化手段
防抖:单位时间内,频繁触发事件,只执行最后一次。 防抖的主要应用场景:
- 搜索框搜索输入。只需用户最后一次输入完,再发送请求
- 手机号、邮箱验证输入检测
节流:单位时间内,频繁触发事件,只执行一次。 节流的主要应用场景:
- 高频事件 例如 resize 事件、scroll 事件
- 手机号、邮箱验证输入检测
相同点:
- 都可以通过使用 setTimeout 来实现
- 降低回调执行频率。节省计算资源
不同点:
- 函数防抖,在一段连续操作结束后,处理回调,利用 clearTimeout 和 setTimeout 来实现。函数节流,在一段连续操作中,每一段时间只执行一次,频率较高的事件中使用来提高性能
- 函数防抖关注一定时间连续触发的事件,只在最后执行一次,而函数节流一段时间内只执行一次
谈谈 this 对象的理解
在绝大多数情况下,函数的调用方式决定了 this 对象的指向
this 关键字是函数运行时自动生成的一个内部对象,只能在函数内部使用,总指向调用它的对象
根据不同的使用场合,this 对象有不同的指向,主要分为下面几种情况
-
默认绑定
- 全局环境中定义的函数,函数内部的 this 指向 window 对象
-
隐式绑定
- 函数还可以作为某个对象的方法调用,这时 this 就指这个上级对象
-
new绑定
- 通过构建函数 new 关键字生成一个实例对象,此时 this 指向这个实例对象
-
显示绑定
- apply()、call()、bind()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时 this 指的就是这第一个参数
-
箭头函数
- 箭头函数没有自己的 this 值,箭头函数中所使用的 this 来自于函数作用域链
- 箭头函数没有自己的 this 值,箭头函数中所使用的 this 都是来自函数作用域链,它的取值遵循普通普通变量一样的规则,在函数作用域链中一层一层往上找。
数组的常用方法有哪些?
-
遍历方法
- map : 映射数组,得到一个映射之后的新数组
- filter:筛选数组
- forEach:遍历数组
- some:判断数组是否有元素满足条件(相当于逻辑或:一真则真,全假为假)
- every:判断数组是否所有满足都满足条件(相当于逻辑与:一假则假,全真为真)
- findIndex:查找元素下标,一般用于元素是引用类型
- reduce:给数组每一个元素执行一次回调,一般用于数组元素求和(也可以求最大值、最小值)
-
增删改查方法
- push() : 末尾新增元素,返回值是新数组长度
- unshift():开头新增元素,返回值是新数组长度
- pop() :末尾删除元素,返回值是删除的那个末尾元素
- shift(): 开头删除元素,返回值是开头的那个末尾元素
- splice() : 删除指定下标元素,第三个参数是一个剩余参数,可以在删除的元素后面插入元素
-
其他方法
- reverse:翻转数组,会修改数组自身
- sort: 数组排序,会修改数组自身
- json: 拼接数组元素,返回值是拼接之后的字符串
- slice: 根据下标范围查询数组元素,返回值是查询后的新数组
- indexOf: 查询元素下标,一般用于元素是值类型