簡體   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