前端面试问题汇总 - JS篇

1. JS的数据类型,如何判断js的数据类型?

        数据类型有:NumberStringBooleanUndefinedNullObjectArray

        其中,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值