为了账号安全,请及时绑定邮箱和手机立即绑定

老师,我用你的浅拷贝的方式,但是不对啊,打印出来两个对象不一样,按说浅拷贝打印出来是一样的,您帮我看一眼

http://img1.sycdn.imooc.com//61d690be0001f61502590316.jpg老师,我用你的浅拷贝的方式,但是不对啊,打印出来两个对象不一样,按说浅拷贝打印出来是一样的,您帮我看一眼

正在回答

4 回答

你改变的值是字符串属于原始数据类型,打印出来当然不一样啦,改变对象里面的值打印出来是一样的

0 回复 有任何疑惑可以回复我~
#1

qq_忆搁浅_6

需要搞清楚原始类型和引用类型,也就是堆和栈,
2022-09-21 回复 有任何疑惑可以回复我~

因为你的a/b是基本类型,这位老师说的浅拷贝的定义不太精确,如果按他的定义的话直接定义const objNew = obj都可以实现他定义的浅拷贝了。

但浅拷贝的意思应该是只拷贝第一层的基本类型数据,其他类型直接引用,你改的是对象里的基本数据类型,所以是可以的。但如果你加一个复杂类型,就像视频说的那样了。

0 回复 有任何疑惑可以回复我~

var obj = {

            a: "hello",

            b: {

                a:'world',

                b: 111

            },

            c: [11, "jack", "tom"]


        }

        function simpleClone (objNew) { //  浅拷贝

            var obj = {};

            for (var i in objNew) {

                obj[i] = objNew[i]

            }

            return obj;

        }

        var objCopy = simpleClone(obj);

        objCopy.b.a = "word1" // 引用类型 浅拷贝

        objCopy.a = "word1234"  // 原始类型 深拷贝

        console.log(obj);

        console.log(objCopy);


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师,我用你的浅拷贝的方式,但是不对啊,打印出来两个对象不一样,按说浅拷贝打印出来是一样的,您帮我看一眼

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信