2024面试题汇总

  1. 如可判断对象是不是空对象?

    1.1可以使用Object.keys(obj).length===0,判断出来没有属性

    1.2 JSON.stringify(obj)===”{}“为true,则代表空属性

    1.3 Object.getOwnPropertyNames获取到对象中的属性名,存到一个数组中,返回数组对象.当为空时也代表属性为空。

    1.4 for in循环如果循环出来的值为空代表对象没有属性

  延申:

复制代码
// 循环的对象值是属性名
var obj={a:1,b:2,c:3};
for(var prop in obj){
  console.log(prop+" "+obj[prop]); 
}
// 循环的数组值是数组下标,并且不推荐循环数组,当数组赋值了Object.prototype也会被遍历出来
var arr = ['nick','freddy','mike','james'];
for(var index in arr){    
    console.log(index +'. ' + arr[index]);
}
// 0. nick
// 1. freddy
// 2. mike
// 3. james

主要区别:for...of 用来遍历数组,不可以遍历对象;相对于forEach是可以使用break;for..of适用于无需知道索引值的数组遍历,可以中断,可以怼字符串、类数组、map和set类型数组的迭代。
复制代码

   2.手写深拷贝

复制代码
function deepCopy(obj){
  if(typeof obj !== 'object') return
  let newObj = Arrary.isArrary(obj) ? [] : {}
  for( let key in obj){
      if(obj.hasOwnProerty(key)){
         newObj[key] = typeof obj[key] === 'object' ? deeCopy(obj[key]) : obj[key]
      }  
    }
 return newObj }
延申:JSON.stringify()方式不推荐使用,当对象内容为undefined,null,Date,RegExp,function,error时会报错;
   hasOwnProperty是检测对象的自用属性,原型上的属性都不会检测,跨层级的属性也不会检测。
   let obj={a:b,c:{d:e} obj.prototype = f:obj.hasOwnProperty(a)//true (d)//false (f) // false
复制代码

   3.防抖

复制代码
 // 函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求

    function debounce (fn, wati) {
       let timer = null
       return function(...args) {
          let _this =  this
          if(timer) clearTimeout(timer)  // 重复点击时清空原定时器
          timer = setTimeout(function() {
          fn.apply(_this,args)    
        },wait)    
      } 
  }
复制代码

  4.节流

复制代码
    //函数节流是指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在 scroll 函数的事件监听上,通过事件节流来降低事件调用的频率

function throttle(fn,wait){
  let timer = undefined
  let _this = this
  return function(...args){
        if(timer !== undefined){
          return // 如果定时器存在,则直接返回。不执行原函数
        }else{
          fn.apply(_this,args)
          timer = setTimeout(function(){  //执行完原函数后,重置timer,重置期间不会再触发都会被return
             timer = undefined
            },wait)
        }
    }  
}
复制代码

 

posted on   ChoZ  阅读(35)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示