如何在javascript中防止变量更改
我想保留变量的原始信息,这样代码的重置就容易多了如何在javascript中防止变量更改,javascript,jquery,Javascript,Jquery,我想保留变量的原始信息,这样代码的重置就容易多了 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);
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
更改?更改为
var $dataSets = [1,2,3,4];
var $oldData = $dataSets.slice();
JavaScript不会将$dataSets
的值传递到$oldData
中,而是传递对$dataSets
本身引用的对象的引用
这种变通方法之所以有效,是因为JavaScript的数组(即$dataSets
所指的数组)有一个名为slice
的方法,在没有参数的情况下调用该方法时,会返回数组的副本。更改为
var $dataSets = [1,2,3,4];
var $oldData = $dataSets.slice();
JavaScript不会将$dataSets
的值传递到$oldData
中,而是传递对$dataSets
本身引用的对象的引用
此解决方法之所以有效,是因为JavaScript的数组(即
$dataSets
所使用的方法)有一个名为slice
的方法,在没有参数的情况下调用该方法时,会返回数组的副本。您可以使用函数array.slice()
,如下所示:
var $dataSets = [1,2,3,4];
var $oldData = $dataSets.slice();
如文档中所述,
slice()
不会更改原始数组,而是返回一个新数组。因此,基本上,使用slice,您有两个不同的数组,可以在其中插入/删除项,而不会干扰另一个。您可以使用函数Array.slice()
,如下所示:
var $dataSets = [1,2,3,4];
var $oldData = $dataSets.slice();
如文档中所述,
slice()
不会更改原始数组,而是返回一个新数组。因此,基本上,使用slice,您有两个不同的数组,可以在其中插入/删除项,而不会干扰另一个。您可能应该包括一些关于为什么这样做的信息。将一个变量指定给另一个变量将复制对基础对象的引用。slice()创建数组的副本。@MikeEdwards您在评论时,我在编辑中处理了它。:)你可能应该包括一些关于为什么这样做的信息。将一个变量指定给另一个变量将复制对基础对象的引用。slice()创建数组的副本。@MikeEdwards您在评论时,我在编辑中处理了它。:)