JS面试常见手撕 算法

目录

1.浅拷贝和深拷贝的实现原理

2.apply,call,bind的实现原理

3.防抖节流函数实现原理。

4.new关键字的实现原理


1.浅拷贝和深拷贝的实现原理

  • 浅拷贝:简单复制了变量的值(包括基本数据类型的值和引用数据类型的值都是直接复制)
  • 深拷贝:基本数据类型的值直接复制,引用数据类型的值则根据这个引用数据类型对象生成一个新的对象,再将新对象的地址重新赋值。

区别:对于引用数据类型变量的值,浅拷贝直接将地址值复制过来,而深拷贝则是将原对象重新生成一个新对象,再将新对象的地址值复制过来。故浅拷贝的引用数据类型的变量指向的是同一个对象,而深拷贝则是分别指向不同的对象,改变其中一个对象不会影响另外一个对象。

    // 对象数组的深拷贝
    function deepClone(current) {
        if (current === null) {
            throw("请输入非空对象引用")
        }
        if (current instanceof Object) {
            // 判断为对象还是数组
            const target = ((current instanceof Array) ? [] : {})
            // 遍历对象属性或者数组下标
            for (let porperty in current) {
                // 遍历对象自身属性而非原型身上的属性
                if (current.hasOwnProperty(property)) {
                    // 判断是基本数据类型还是引用数据类型还是基本数据类型中的null
                    if (current[property] === null) {
                        target[property] = current[property]
                    } else if (typeof current[property]==="obj") {
                        target[property]=deepClone(current[property])
                    }else{
                        target[property] = current[property]
                    }
                }
            }
            return target
        } else {
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值