我一直遇到这个问题。现在它与Date
对象
var now = new Date();
var later = new Date();
later.setHours( later.getHours() + 8 );
<Wait for somthing>
now = later;
later.setHours( later.getHours() + 8 );
alert(now == later); //returns True
我认为可以使用回调来解决这个问题:
var adjustTime = function(callback){
now = later;
callback();
}
adjustTime(function(){
later.setHours( later.getHours() + 8 );
});
alert(now == later); //returns True
我不明白什么?如何正确更新这些变量?
修改 好的,我应该更好地解释自己。我想要做的是将now变量更新为以后的值。之后我想在8小时后再增加。
答案 0 :(得分:6)
Date
个实例之间的等式比较只测试对象引用相等性。无论如何,一旦你完成了这个:
now = later;
然后变量“now”和“later”引用相同的对象。因此,“以后”的更新是“现在”的更新。
Date
原型上的“setter”方法都直接修改对象。也就是说,Date
个实例不是不可变的。
编辑 - 我猜你真正想要的是保持“现在”和“稍后”分开。在这种情况下,这样的事情可能就是你想要的:
now = later;
later = new Date(later.getTime());
later.setHours(later.getHours() + 8);
之后,“now”和“later”将不相等,因为您已将其设置为 new Date
实例。
答案 1 :(得分:1)
稍后now = later;
更改后会反映现在和vise-verse。因为两者都是同一个对象
var now = new Date();
var later = new Date();
later.setHours( later.getHours() + 8 );
<Wait for somthing>
now = later; // now and later have refeerence of same object
later.setHours( later.getHours() + 8 );
alert(now == later); //returns True