我不明白!
函数messup()
应该改变copy
,而不是original
。我做错了什么?
<head>
<script src="../js/jquery-1.11.0.min.js"></script>
<script>
function messup(copy) {
copy[0] ++;
console.log(original);
$('.putContentHere').html('<button class="plus">+</button>');
}
var original = [1, 1];
var copy = original;
$(document).ready(function() {
messup(copy);
$('html').on('click', '.plus', function() {
messup(copy);
});
});
</script>
</head>
<body>
<div class="putContentHere"></div>
</body>
如何在副本混乱时保留原件?
答案 0 :(得分:5)
制作数组副本的最简单方法是:
var copy = original.slice(0);
这是一个浅数组的副本,这对你的目的来说很好。
一个简单的任务:
var copy = original;
导致新变量&#34; copy&#34;引用与&#34;原始&#34;完全相同的数组。数组是对象,变量值引用到对象。
旧版IE中.slice()
方法并不存在,但这些方法的相关性正在下降。
答案 1 :(得分:0)
因为var copy = original;
没有复制数组。
What it does:
original ----------------------> Array
|
|
copy --------------------------+ (The reference is copied)
=================================================================================
What you want:
original ----------------------> Array
copy ----------------------> Array (The Array itself is copied)
复制数组有3种(实际上是4种):Shallow copy,Deep copy,参考副本。
在您的代码中,您只是复制引用。你想要做的是浅拷贝或深拷贝。
var copy = original.slice(); //shallow copy
答案 2 :(得分:0)
您只是通过执行
来使用对原始数组的引用var copy = original;
假设您的数组只是一组整数,使用
var copy = original.slice (0);
将复制您的数组及其内容。所以,例如:
var original = [1, 1, 1];
var copy = original.slice (0);
copy[1] = 2;
console.log (original); // This will print [1, 1, 1]
console.log (copy); // This will print [1, 2, 1]