关于浅克隆
相关代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> var arr1=[1,[2,3]]; var arr2=[arr1[0],arr1[1]]; arr1[1].push(4); arr1.pop(); console.log(arr2); </script> </body> </html>
问题描述:
请问老师上述输出arr2的值为什么不是[1],而是[1,[2,3]]?
12
收起
正在回答
1回答
同学你好,可以参考如下来理解:
首先,这段代码中arr1[1]的结果是一个数组,数组是引用类型数据,此时引用类型数据不会被克隆,内存中也不会产生新的副本,而是让新变量指向该引用类型数据。其次,arr1.pop()只是删除了arr1对该数组的指向,因为该数组一直还在被arr2中的元素指向,所以该数组还在内存中,并未消失,也因此arr2输出的结果是[1,[2,3]]。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星