前端常见手撕题(详细注释版):持续更新中……

本文详细解析了前端面试中常见的手撕代码题目,包括instanceof、实现new关键字、ajax、Promise.all、拷贝(浅拷贝、深拷贝)、防抖和节流等,帮助开发者深入理解并掌握相关技术。
摘要由CSDN通过智能技术生成

01.手撕instanceof

第一个参数是实例,第二个参数是构造函数

function myInstanceof(instance, object) {
   
    let current = instance;  //定义一个指针存储当前实例的位置
    let target = object.prototype; //存储目标构造函数的原型对象
    while(current) {
      //指针指向null时说明原型链上没这个构造函数
        if(current.__proto__ == target) {
     //如果找到了,就返回true
            return true;
        } else {
      //如果没找到,指针向后指
            current = current.__proto__
        }
    }
    //如果找到最后的null都没有,说明该实例不属于object所在原型链上任何一个原型对象
    return false;
}

测试代码:

console.log([1,2,3] instanceof Array); //true
console.log(myInstanceof([1,2,3], Array)) //true

console.log([1,2,3] instanceof Object);//true
console.log(myInstanceof([1,2,3], Object)); //true

console.log([1,2,3] instanceof Function);//false
console.log(myInstanceof([1,2,3], Function)); //false

console.log([1,2,3] instanceof RegExp);//false
console.log(myInstanceof(/1/, RegExp)); //true

02.如何让 0.1+0.2 === 0.3

function withinError(left, right) {
   
    return Math.abs(left-right) < Number.EPSILON;
}

console.log(withinError(0.1 + 0.2, 0.3)); //true

03.手撕new关键字

第一个参数是构造函数,第二个参数是实例化时的参数

function myNew(Fn, ...args) {
   
    //1.判断传入的是否是一个函数
    if(typeof Fn != 'function') return false;
    //2.创建一个新对象,让该对象的__proto__指向构造函数的prototype
    const obj = Object.create(Fn.ptototype);
    //3.让Fn中的this指向这个新创建的对象,并给它们传值
    let result = Fn.call(obj, ...args);
    //4.如果构造函数写了返回值,要判断,如果是复杂数据类型,那么就返回该返回值
    if(result && (typeof result === 'object' || typeof result === 'function')) {
   
        return result;
    }
    //5.如果构造函数没有返回值、或有返回值但是简单数据类型,则返回新创建的对象
    return obj;
}

04.手写原生ajax

<body>
    <button>点击发送请求</button>
    <div id="result"></div>

    <script>
        //获取button元素
        const btn = document.querySelector('button');
        const result = document.querySelector('#result');
        btn.addEventListener('click', function() {
     
           //1.创建对象
            const xhr = new XMLHttpRequest();
            //2.初始化࿰
  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为leetcode是指华为面试要求候选人现场leetcode目。这种面试方式常用于评估候选人的编程能力和解决问的能力。 使用华为leetcode的优点是能够直接考察候选人的编程能力和思维逻辑。面试官可以根据候选人的解过程和代码实现来评估其算法和编程能力,从而更直观地了解候选人的能力水平。 使用这种面试方式还可以考察候选人在时间有限的情况下解决问的能力。编码要求候选人在短时间内完成编写算法和实现代码。这种情况下,候选人需要通过灵活运用算法知识、代码实现技巧和系统思考能力,快速找到解决问的方法。 然而,华为leetcode也存在一定的局限性。一方面,leetcode可能只考察候选人的算法和编程能力,而忽略了其他的技术要求,如系统设计、代码架构等。另一方面,由于目限定在leetcode的,候选人可能通过事先刷来准备,从而提前得到目的答案,影响面试评估的公正性。 为了克服这些限制,华为还会在面试结合其他的问和项目经验,综合评估候选人的整体能力。此外,华为还会要求候选人进行coding test,即在指定时间内以线上编码的方式解决问,更直观地了解候选人的编码能力。 总的来说,华为leetcode是一种评估候选人编程能力和解决问能力的有效方式,但也需要综合考虑其他方面的能力和筛选方法,以评估候选人的真实水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值