You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中对象属性是否同时求值?能否确保示例属性值始终一致?

Node.js中对象属性的求值顺序问题

问题核心

在Node.js中,对象字面量的属性是否会被同时求值?比如执行以下代码:

{ a: Date.now(), b: Date.now() }

某次执行返回了{ a: 1664294035466, b: 1664294035466 },能否确保a和b的值始终相同?

结论

不能确保两者的值始终相同。

原因解析

JavaScript(包括Node.js)中,对象字面量的属性是按从左到右的顺序依次求值的,并非同时计算:

  • 先执行a对应的表达式Date.now(),生成一个时间戳
  • 再执行b对应的表达式Date.now(),生成另一个时间戳

虽然Date.now()执行速度极快,绝大多数场景下两次调用结果会相同,但在极端情况中(比如两次调用刚好跨过毫秒边界,或者线程在两次调用之间被短暂阻塞),两次返回的时间戳就会出现差异。

验证示例

可以通过以下代码模拟毫秒边界场景,大概率会得到不同的结果:

let obj;
// 等待即将进入下一个毫秒的时刻
while (Date.now() % 1000 !== 999) {}
// 此时执行两次Date.now(),很可能跨毫秒
obj = { a: Date.now(), b: Date.now() };
console.log(obj);
// 可能输出:{ a: 1699999999999, b: 1700000000000 }

确保值相同的方案

如果需要保证a和b的值完全一致,应该先将Date.now()的结果存入变量,再赋值给对象属性:

const now = Date.now();
const obj = { a: now, b: now };

内容的提问来源于stack exchange,提问作者BTL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:40:30