javascript'='作为链接对象?

时间:2013-11-29 06:26:26

标签: javascript arrays operator-keyword splice

我创建了一个删除数组中“-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],temp也是[1,2,3,4]

原始和临时都被修改了!

为什么会这样?

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

var temp = original;

另外要提到equal= operator不会复制对象。

您可以尝试这样的方法来实现您的目标:

var temp = original.slice(0);

答案 2 :(得分:1)

你可以像这样使用Array filter method

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

答案 3 :(得分: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/