繁体   English   中英

Array.push()在重复的对象中,不正确或无法理解

[英]Array.push() in duplicated object, incorrect or incomprehensible

我发现问题/不良行为Array.push() 我不确定我做错了什么还是.push()方法不正确。

我将举一个我正在处理的小例子

var x = [];
function test()
{
  var y = x;
  for(var i = 1; i<10; i++)
  {
    y.push(i);
  }
  alert("x = " + x);
}

alert("x = " + x);

test();

//result:
//1'st alert: x =
//2'rd alert: x = 1,2,3,4,5,6,7,8,9

因此,我的示例与我在项目中遇到的实际问题相比是无法比拟的,我已经解决了它:添加方法参数(x作为参数发送而未与全局范围共享)或对象克隆(在这种情况下)。

问题

  1. 为什么要推动变革x当上进行推y初始化所用x
  2. 这个示例发生在跨浏览器中,我想知道node.js是否能同样出色地完成它,现在是一个问题:我使用了错误的.push()方法? 从现有对象初始化对象的正确方法是什么?

也许我的问题很愚蠢,但我找不到记录在案的解释。

谢谢。

为什么要推动变革x当上进行推y初始化所用x

因为y不是“用x初始化” ,所以它 x 在Javascript中,所有变量都包含引用 (原始值(例如字符串或数字)除外)。

x是数组的名称。 陈述y = x; 只是为同一数组创建另一个名称。

这个示例发生在跨浏览器中,我想知道node.js是否能同样出色地完成它,

当然。 就是这种方式。

现在的问题:我使用了错误的.push()方法?

是。 (好吧,不,您使用的是正确的,只是您预料到了错误的事情。)

从现有对象初始化对象的正确方法是什么?

如果要克隆对象,则有不同的处理方法,具体取决于您是浅克隆还是深克隆。 此信息可以轻松查找,我将不再提供其他实现。

相关搜索: https : //stackoverflow.com/search?q=javascript+clone+object

发生这种情况是因为您在执行第二次警报后调用了该函数。 空结果来自功能外部的警报,第二个是功能内部的警报。 这应该可以正常工作:

var x = [];
function test()
{
  var y = x;
  for(var i = 1; i<10; i++)
  {
    y.push(i);
  }
  alert("x = " + x);
}

test();

alert("x = " + x);

的jsfiddle

var x = [];

创建一个Array对象,创建一个变量x ,并将指向Array对象的指针放在x

var y = x;

创建变量y ,并将指向数组的指针从x复制到y 现在,两个变量都指向同一个Array对象。

现在不要紧要使用什么变量来推送相同的Array对象。

如果需要其他数组,则需要复制数组,而不是指针。 也就是说,创建新的Array对象,并将其与其他Array对象中的值一起推送。 (或使用一些复制功能(如果有))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM