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

来源:2-5 深浅拷贝有哪些方式(2)

慕的地9557871

2022-01-06 14:49

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

写回答 关注

4回答

  • qq_忆搁浅_6
    2022-09-21 10:58:06

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

    qq_忆搁浅...

    需要搞清楚原始类型和引用类型,也就是堆和栈,

    2022-09-21 11:02:22

    共 1 条回复 >

  • 慕容0448566
    2022-04-29 11:37:29
  • ReusKai
    2022-02-22 23:01:54

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

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

  • 慕仰7307907
    2022-01-24 09:56:38

    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);


直面JavaScript中的30个疑难杂症

直面JavaScript中的30个疑难杂症

14383 学习 · 20 问题

查看课程

相似问题