0

我一直遇到这个问题。现在它与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 小时。

4

2 回答 2

6

实例之间的相等比较Date只是测试对象引用相等。无论如何,一旦你这样做了:

now = later;

那么变量“now”和“later”引用同一个对象。因此,对“稍后”的更新是对“现在”的更新。

Date原型上的“setter”方法都是直接修改对象。也就是说,Date实例不是不可变的。

编辑——我猜你真正想要的是把“现在”和“以后”分开。在这种情况下,您可能想要这样的东西:

now = later;
later = new Date(later.getTime());
later.setHours(later.getHours() + 8);

之后,“现在”和“以后”将不再相等,因为您将其设置为 Date实例。

于 2012-09-19T13:44:57.857 回答
1

在以后now = later;的变化之后将反映在现在和反义词中。因为两者都是同一个对象

   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
于 2012-09-19T13:44:06.903 回答