1. JS的数据类型,如何判断js的数据类型?
数据类型有:Number,String,Boolean,Undefined,Null,Object,Array
其中,Number,String,Boolean,Undefined等基本数据可以直接用 typeof 进行判定。但对于对象类型(如数组和null),typeof通常不能准确判断,它会简单地返回 "object"。为了更准确地判断数据类型,可以使用instanceof运算符来判断对象是否为某个构造函数的实例。对于数组和null,可以使用Array.isArray()方法来判断是否为数组,使用== null来判断是否为null
2. 数组去重方法有哪些?
- 新建数组,循环遍历去重
- 借助Set数据类型,[...new Set(array)] 或 Array.from(new Set(arr))
- 新建对象,遍历数组,在转回新的数组
3. 深拷贝和浅拷贝区别?如何实现深拷贝?
深拷贝和浅拷贝的区别在于是否真正获取了一个对象的复制实体,而不是引用。只针对Object和Array这样的引用数据类型。
浅拷贝仅仅是复制指向的内存地址,如果原地址中对象被改变,那么浅拷贝出来的对象也会相应改变。
深拷贝是在计算机中开辟一块新的内存地址用于存放复制的对象。
4. 说一下防抖和节流,分别如何实现?
- 防抖的原理是在事件触发后等待一段时间,如果在这段时间内没有再次触发事件,则执行该事件,否则重新等待一段时间。适用于用户输入(如搜索框输入)等频繁触发的事件。
// 封装
function debounce(func, delay) {
let timerId;
return function(...args) {
clearTimeout(timerId);
timerId = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
// 引用示例const debouncedFunction = debounce(function() {
console.log('Debounced function executed');
}, 300);
// 触发事件
debouncedFunction(); // 不会立即执行
debouncedFunction