javascript - 变量不同步更新

标签 javascript

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

最佳答案

Date 实例之间的相等性比较仅测试对象引用相等性。无论如何,完成此操作后:

now = later;

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

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

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

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

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

关于javascript - 变量不同步更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495974/

相关文章:

javascript - RGB 到 XYZ 和 LAB 颜色转换

javascript - Unbreak my code - 如何在 javascript 的另一个函数中使用函数名作为参数

javascript - 如何根据指定属性以外的属性数将对象附加到数组?

javascript - Fullcalendar 2 与 Bootstrap 3 和 Rails 4 不兼容吗(我真的需要帮助...几天)

javascript - Jquery刷新新打开的窗口

javascript - JSON 对象被引号分隔

javascript - 尝试在 Android 应用程序中使用 google.maps.geocoder 时出现 'google is not defined' 错误

javascript - 如何检查图像的特定像素是否透明?

javascript - 元素上的 jQuery .outerHeight() 在方向更改时返回不正确的大小

javascript - jQuery 显示/隐藏仅适用于第一个选择器