javascript'='用作链接对象

javascript '=' works as linked object?

本文关键字:链接 对象 javascript      更新时间:2023-12-01

我编写了一段代码,删除了数组中的"-1",但我不想修改原始代码。

下面就是那个。

var original = [ 1, 2, 3, 4, -1, -1 ];
var temp = original;
for ( var i = ( temp.length - 1 ); i >= 0; i-- ) {
    if ( temp[j] == -1 ) {
    temp.splice( i, 1 );
}

脚本执行后。原件是[1,2,3,4],温度也是[1,2,3.4]

原始和临时都被修改了!

为什么?

这是因为只有一个数组-简单地说,两个变量名称相同的数组。就像一个人(有昵称)一样,一个对象可以有多个名称。

JavaScript中的=(赋值)运算符不会复制/克隆/复制正在赋值的对象

Array.splice函数突变数组(其中只有一个),当与上述函数一起使用时,该数组解释了行为。

要创建阵列的浅层克隆,arr.slice(0)可能很有用。

您可以使用类似的数组过滤方法

var res = original.filter(function(i){ return i != -1;});

这是因为您只使用了一个数组。

var temp = original;

还要注意,equal=运算符不会复制对象。

你可以尝试这样的方法来实现你想要的:

var temp = original.slice(0);
var original = [ 1, 2, 3, 4, -1, -1 ];
var tem = original.filter(function (d) {
    return d !== -1;
});
console.log(original); // [1, 2, 3, 4, -1, -1] 
console.log(tem); // [1, 2, 3, 4] 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

演示:http://jsfiddle.net/J37tF/