简单的Javascript数组问题

Simplistic Javascript array issue

本文关键字:问题 数组 Javascript 简单      更新时间:2023-09-26
var a = [], b = [];
a.push('a');
a.push('b');
a.push('c');
b = a;
b.push('d');
console.log(a);
为什么 a = ["a", ">

b", "c", "d"] ?,做 b=a 时如何避免这种交叉引用;我只想有 2 个单独的对象,独立

最后

a = ["a", "b", "c"], b = ["a", "b", "c", "d"]

当你将 a 分配给 b 时,你实际上是在分配对 a 的引用。因此,对 b 所做的任何更改也会影响 a。要做你真正想做的事情,请尝试:

b = [].concat(a);

这将制作 A 的实际副本。

在 JS 数组中也是对象(Array对象的实例(,因此 JS 中的此类对象是通过引用而不是按值分配的,所以当你这样做时:

b = a

b现在通过引用分配给a,因此它会影响a数组。

要做你想做的事情,你可以做:

b = a.slice();

下面是一个示例:

var a = [], b = [];
a.push('a');
a.push('b');
a.push('c');
b = a.slice();
b.push('d');
console.log(a);

结果:

[a, b, c]

因为变量引用对象,所以它们不会复制它们。

您可以使用

var a = [], b = [];
a.push('a');
a.push('b');
a.push('c');
b = a.slice();
b.push('d');
console.log(a);

因为赋值不会复制变量内容。(请参阅相关的 这是 NodeJS 中的变量范围错误还是我只需要更多睡眠问题。

对于数组,您可以使用 concat 创建一个(浅(复制的数组:

a = [1,2,3]
b = [].concat(a)
b.push(4)

。或者slice正如其他答案所说。

一旦你做了b = a ab都指向内存中的同一个数组;你需要将元素分别推送到ab,或者一旦你把元素推送到a你可以循环它并将其推送到b,例如

for ( var i = 0; i < a.length; i++ ){ b.push( a[i] ); }