[英]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.