Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中防止变量更改_Javascript_Jquery - Fatal编程技术网

如何在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您在评论时,我在编辑中处理了它。:)