1

我想保留变量的原始信息,以便代码的重置会容易得多。

var $dataSets = [1,2,3,4];
var $oldData = $dataSets;

$('.button').click(function(){
    $(this).toggleClass('selected');
    if($(this).hasClass('selected')) {
        $dataSets.splice(1,1);
        console.log($dataSets);
    } else {
        console.log($oldData);
    }
});

我的代码存在的问题是,当我修改它时,$dataSets它也会发生变化$oldData。我怎样才能不$oldData改变?

4

2 回答 2

4

改成

 var $dataSets = [1,2,3,4];
 var $oldData = $dataSets.slice();

JavaScript 不传递$dataSetsinto的值$oldData,而是传递对$dataSets自身引用的事物的引用。

这种解决方法之所以有效,是因为 JavaScript 的数组(就是这样$dataSets)有一个被调用的方法slice,当不带参数调用该方法时,它会返回数组的副本。

于 2013-10-24T17:52:41.733 回答
0

您可以使用该函数Array.slice(),如下所示:

var $dataSets = [1,2,3,4];
var $oldData = $dataSets.slice();

如文档中所述,slice() 不会更改原始数组,而是返回一个新数组。所以基本上,使用切片,你有两个不同的数组,并且可以在一个中插入/删除项目而不会干扰另一个。

于 2013-10-24T18:03:07.987 回答