老师 关于克隆的问题
来源:5-6 深克隆和浅克隆
lcy_18
2021-03-20 23:00:21
console.log(result == arr1); // 期望false,因为引用类型值进行比较的时候,等等比较的是内存地址(这个不是说明result和arr1不是同一个内存地址吗)
console.log(result[4] == arr1[4]); // 藕断丝连(不是一个内存地址,为什么值会相等???)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var arr1 = [1, 2, 3, 4, [6, 9, 4]];
// 结果数组
var result = [];
// 遍历原数组中的每一项,把遍历到的项推入到结果数组中
for (var i = 0; i < arr1.length; i++) {
result.push(arr1[i]);
}
console.log(result);
console.log(result == arr1); // 期望false,因为引用类型值进行比较的时候,等等比较的是内存地址
console.log(result[4] == arr1[4]); // 藕断丝连
</script>
</body>
</html>
2回答
同学你好,解答如下:
同学提供的代码中,result[1]的结果是数字2,arr1[1]的结果也是数字2,2和2相等,所以console.log(result[1] == arr1[1]); 是true。等号“=”比较基本类型的值(比如数字),是否相等时,比较的是值是否相等,而不是地址;只有比较引用类型时,才会比较地址。所以这里要比较result[4] 与arr1[4],才能看出result与arr1是否还有关联。
祝学习愉快!
好帮手慕久久
2021-03-21
同学你好,解答如下:
result == arr1是false,说明二者的内存地址不一样。但是如果arr1中有引用类型的数据,比如数组:
那么复制得到的result中的该元素,会与arr1中的该元素,指向相同(内存地址相同):
所以即使arr1与result的内存地址不存,但是二者中的元素[6,9,4]是同一个内存地址,因此
console.log(result[4] == arr1[4]);的结果为true。
祝学习愉快!