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