[英]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作为参数发送而未与全局范围共享)或对象克隆(在这种情况下)。
问题 :
x
当上进行推y
初始化所用x
? 也许我的问题很愚蠢,但我找不到记录在案的解释。
谢谢。
为什么要推动变革
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);
var x = [];
创建一个Array对象,创建一个变量x
,并将指向Array对象的指针放在x
。
var y = x;
创建变量y
,并将指向数组的指针从x
复制到y
。 现在,两个变量都指向同一个Array对象。
现在不要紧要使用什么变量来推送相同的Array对象。
如果需要其他数组,则需要复制数组,而不是指针。 也就是说,创建新的Array对象,并将其与其他Array对象中的值一起推送。 (或使用一些复制功能(如果有))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.