重复对象中的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作为参数发送,不与全局范围共享)或对象克隆。
问题::
- 在用
x
初始化的y
上执行推送时,为什么要推送更改x
- 这个例子发生在跨浏览器上,我想知道node.js是否也能做到这一点。现在的问题是:我使用了错误的.push()方法?从现有对象初始化对象的正确方法是什么
也许我的问题是愚蠢的,但我找不到有记录的解释。
谢谢。
在用
x
初始化的y
上执行推送时,为什么要推送更改x
?
因为y
不是用x
"初始化的,所以它是x
。在Javascript中,所有变量都包含引用(基本值除外,如字符串或数字)。
x
是一个数组的名称。声明y = x;
只是为同一数组创建另一个名称。
这个例子发生在跨浏览器上,我想知道node.js是否也能做到这一点
当然。这样符合规格。
现在的问题是:我使用了错误的.push()方法?
是的。(好吧,不,你用对了,你只是预料错了。)
从现有对象初始化对象的正确方法是什么。
如果你想克隆一个对象,有不同的方法来实现它,这取决于你想要浅克隆还是深克隆。这些信息可以很容易地查找,我不会再提供另一个实现。
相关搜索:https://stackoverflow.com/search?q=javascript+克隆+对象
发生这种情况是因为您在执行第二个警报后调用了该函数。空结果来自函数外的警报,第二个结果来自函数内的警报。这应该能正常工作:
var x = [];
function test()
{
var y = x;
for(var i = 1; i<10; i++)
{
y.push(i);
}
alert("x = " + x);
}
test();
alert("x = " + x);
Jsfddle
var x = [];
创建一个Array对象,创建一个变量x
,并将指向Array对象的指针放在x
中。
var y = x;
创建一个变量y
,并将指向数组的指针从x
复制到y
。现在,两个变量都指向同一个Array对象。
现在,使用什么变量来推送并不重要,将推送相同的Array对象。
如果需要不同的数组,则需要复制数组,而不是指针。也就是说,创建新的Array对象,并使用其他Array对象的值推送它。(或者使用一些复制功能(如果可用)
- 重复对象中的Array.push(),不正确或无法理解
- 错误:'这'对象不正确;在JQuery中单击事件-单击时的意外行为
- Kinetic.js旋转组对象的新子对象具有不正确的偏移
- 猫鼬 + lodash 扩展对象复制数组不正确
- 主干集合的模型对象结构不正确
- Javascript Date 对象不正确的日期
- Ajax - Spring 发送 javascript 对象并接受为自定义对象.客户端发送的请求在语法上不正确
- json对象内部的json处理不正确
- 将套接字存储为键会产生不正确的值Javascript对象.里面的例子
- Javascript控制台日志报告对象属性不正确
- 传递手动创建的RegExp对象时,String.match返回不正确
- 表单数据中的对象处理不正确
- FancyTree:节点对象在拖动到根级别时不正确
- Cheerio:SyntaxError:属性选择器格式不正确:对象全局
- JSON.stringfy(对象)不正确
- JS日期对象解析不正确
- 使用JSON.parse生成JSON对象的JSON格式不正确
- 对象.创建,JSON时不正确.对对象进行字符串化
- ShadowRoot's getSelection(). getrangeat(0)返回不正确的范围对象在谷歌C
- Javascript嵌套对象的Vim缩进不正确