簡體   English   中英

循環和數組推送的JavaScript

[英]javascript for loop and array pushing

我正在嘗試創建從某個日期開始直到今天的日期對象數組。

這是我的代碼:

var beginning = new Date("04,06,2013");

var dates = [];
var today = new Date();

while (beginning < today){
    var x = beginning; 
    console.log(x);
    dates.push(x);
    beginning.setDate(beginning.getDate()+1)
}

for (var i in dates) {
  console.log(dates[i]);
}

在while循環中,我看到正確的日期在遞增,但是當我在最后一個for循環中打印出數組中的日期時,我看到所有推入的日期都是今天的日期。

有任何想法嗎?

您的代碼要做的是將一堆引用推送到完全相同的Date對象。 因此,您擁有一個由所有相同的Date對象組成的數組,並且每次更改該對象時,數組中的所有元素都指向同一對象,因此它們看上去都將發生變化。

當您將對象推入數組或將對象分配給變量時,它不會產生副本,而是會推向它的引用(像其他語言中的指針一樣,將其想到)。 要為循環的每次迭代推送不同的日期對象,您每次都要在循環中創建一個新的日期對象並將其推送。

在javascript中,將對象或數組分配給任何變量(包括將其推入數組)僅分配對該對象或數組的引用,而不是副本。 這是一個普遍的問題,大多數人無法使用javascript。

您可以每次通過循環創建一個新的日期對象,如下所示:

var beginning = new Date("04,06,2013");

var dates = [];
var today = new Date(), x;

while (beginning < today){
    x = new Date(beginning.getTime()); 
    console.log(x);
    dates.push(x);
    beginning.setDate(beginning.getDate()+1)
}

在所有這些代碼中,您僅使用一個Date實例。

要創建日期的副本,請執行以下操作:

x = new Date(beginning.getTime());

然后調用.setDate()方法將其向前移動。

JavaScript Date實例上的設置器更改對象。 他們不會創建新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM