【问题标题】:Why does splice() change both Arrays? [duplicate]为什么 splice() 会改变两个数组? [复制]
【发布时间】:2016-04-10 01:47:14
【问题描述】:

看下面的代码:

var x = [1, 2, 3], y;
y = x;
y.splice(0,0,4);

给出:

y = [4, 1, 2, 3]    //  (correct)

x = [4, 1, 2, 3]    //  (why did this change too?)

当我在y 上调用.splice() 时,为什么x 数组发生了变化?

【问题讨论】:

标签: javascript arrays splice


【解决方案1】:

对象(包括数组)是通过引用传递的(实际上,这就是它的作用……——纯粹主义者可能不同意这种说法)。 splice 方法会改变原始数组。因此,由于xy 指向同一个数组,y 上的splice 也会改变x。要将x 浅克隆到y,请执行y = x.slice()。 (请注意,x 中的任何对象都不会被克隆;它们将通过引用传递。)

var a = [1,2,3];
var b = a;
a[0] = 42;
alert(b[0]); // will show 42
var c = a.slice(); // explicitly makes a copy
a[1] = 6502;
alert(c[1]); // will show 2, not 6502

取自value type reference type object in javascript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2021-11-03
    相关资源
    最近更新 更多