gpt4 book ai didi

JavaScript - setDate 覆盖预分配变量的值

转载 作者:行者123 更新时间:2023-11-30 16:06:00 25 4
gpt4 key购买 nike

我正在尝试将不同的日期分配给单独的 task() 对象;但是 javascript 在这种情况下表现出意外,从下面代码段的附加输出中可以看出。

在分配日期(即预期输出)时,它会返回预期值(与分配的值相同),但在查看它们时(即实际输出),它会以某种方式覆盖所有日期变量的值,并仅返回所有日期变量的最后分配值

请帮我理解这是怎么回事!

  

var task = function() {
this.name, this.date,this.id;
this.saveTask = function(n,d)
{
this.name = n;
this.date = d;
};
this.gettask = function()
{
return this.id+": "+this.date;
};
}

var d = new Date();
var obj = [];
console.log("Expected Output");
for(i=0;i<5;i++){
obj[i] = new task();
obj[i].id = i;
d.setDate(i);
obj[i].date = d;
console.log(i+": "+d); //Display assinged value
}

console.log("Actual Output");
for(i=0;i<5;i++){
console.log(obj[i].gettask());
}

控制台输出

 Expected Output
0: Sat Apr 30 2016 10:42:20 GMT+0530 (India Standard Time)
1: Fri Apr 01 2016 10:42:20 GMT+0530 (India Standard Time)
2: Sat Apr 02 2016 10:42:20 GMT+0530 (India Standard Time)
3: Sun Apr 03 2016 10:42:20 GMT+0530 (India Standard Time)
4: Mon Apr 04 2016 10:42:20 GMT+0530 (India Standard Time)
Actual Output
0: Mon Apr 04 2016 10:42:20 GMT+0530 (India Standard Time)
1: Mon Apr 04 2016 10:42:20 GMT+0530 (India Standard Time)
2: Mon Apr 04 2016 10:42:20 GMT+0530 (India Standard Time)
3: Mon Apr 04 2016 10:42:20 GMT+0530 (India Standard Time)
4: Mon Apr 04 2016 10:42:20 GMT+0530 (India Standard Time)

最佳答案

您正在为每个任务 分配相同的日期对象。为循环中的每个日期创建一个新日期。

for (let i = 0; i < 5; i++) {
let d = new Date();
d.setDate(i);

let t = new task();
t.date = d;
// etc

obj.push(t);
}

我建议你读一读~ Is JavaScript a pass-by-reference or pass-by-value language?


请注意,每个日期对象的时间部分可能因执行时间不同而不同。如果您希望它们都具有相同的时间但日期不同,则需要稍作更改。

关于JavaScript - setDate 覆盖预分配变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37043202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com