Javascript 一个对象声明中的两个Date.now()
让Javascript 一个对象声明中的两个Date.now(),javascript,node.js,date,datetime,Javascript,Node.js,Date,Datetime,让var o={a:Date.now(),b:Date.now()} 是否o.a===o.b始终true?(我最感兴趣的是Node.JS。)即使这两者在某些JS引擎实现方面可能总是相等的,但从逻辑上讲,这是两个不同的时间点,我会这样对待它们。不 在我们深入了解规范可能会说什么之前,Date.now可以在运行时用用户定义的函数替换。这适用于节点和浏览器: let oldNow = Date.now; Date.now = function () { let wait = oldNow() +
var o={a:Date.now(),b:Date.now()}
是否
o.a===o.b
始终true
?(我最感兴趣的是Node.JS。)即使这两者在某些JS引擎实现方面可能总是相等的,但从逻辑上讲,这是两个不同的时间点,我会这样对待它们。不
在我们深入了解规范可能会说什么之前,Date.now
可以在运行时用用户定义的函数替换。这适用于节点和浏览器:
let oldNow = Date.now;
Date.now = function () {
let wait = oldNow() + 1000;
while (oldNow() < wait) {
// wait one second
}
return oldNow();
}
让oldNow=Date.now;
Date.now=函数(){
让我们等待=oldNow()+1000;
while(oldNow()
这样,每次调用至少需要一秒钟,因此您的两次调用永远不会相等
当我们看到它时,它只是说它回来了
指定到现在为止的呼叫发生的UTC日期和时间的时间值
它不保证两个调用返回相同的值。据我所知,但不能保证准确性
同一行中的两个调用很可能返回相同的时间,因为底层计时器不精确,并且两个调用发生在同一个刻度内,但规范似乎没有指定该时间。如果您对精度感兴趣,我建议使用performance.now()。如果需要它们相同,我建议为对象编写一个构造函数,然后将Date.now()赋给一个临时变量,然后将该值赋给a和b 下面是API的入门介绍
以下是一些特定于节点的信息:否,请尝试以下简单测试:
var test = new Array();
for(var i=0; i<40000; i++){
test.push({a:Date.now(), b:Date.now()});
}
for(var i=0 ; i<test.length; i++){
if(test[i].a != test[i].b){
console.warn('a & b !=');
}
}
var test=newarray();
对于(var i=0;iNo
你的问题暗示了两个问题:
对象初始值设定项查看属性初始值设定项值并“优化”它们,或者避免重复调用,这有什么特别之处吗
将Date.now
快速连续调用两次时始终返回相同的值
答案是否定的,否定的:-)让我们更详细地看一下:
对象初始值设定项
对象初始值设定项是逐步处理的。这在规范()中有详细说明,虽然在之前的第5版规范中,这是一个更容易理解的部分,但它基本上表示创建了对象,然后按源代码顺序将属性添加到对象中,一次添加一个。因此:
var o = {
a: "one",
b: "two"
};
首先,JavaScript引擎创建对象,然后计算a
(“one”
)的属性初始值设定项的右侧,将a
属性与结果值相加,然后计算b
(“two”
)的属性初始值设定项的右侧,然后将b
属性与结果值相加。因此,我们知道,右手边是单独评估的,在评估过程中的不同时刻。这就是为什么:
var value = 0;
function unique() {
return value++;
}
var o = {
a: unique(),
b: unique()
};
var值=0;
函数唯一(){
返回值++;
}
变量o={
a:唯一(),
b:唯一的()
};
log(“o.a=“+o.a+”,o.b=“+o.b”)代码>
使用performance.now()
我可以得到两个不同的值!谢谢。啊,从你的问题来看,不清楚目的是让他们有所不同还是确定他们是相同的。很高兴我能帮上忙。这不会阻止事件循环一秒钟吗?@是的。这是一个简单的证明,Date.now
可能返回两个不同的值(尽管有一段时间,Omniture中使用了一些非常相似的代码,并导致了许多问题)。@ssube有趣的是,您的示例显示了该日期。now还可以在运行时替换为用户定义的函数,该函数始终返回相同的值,在这种情况下,这种说法总是正确的。当然只是开玩笑。。。