Javascript对象值在定义时显示为NaN

Javascript对象值在定义时显示为NaN,javascript,Javascript,我遇到了一个不寻常的JS问题 JS小提琴: 请注意,小提琴不会产生任何结果,只会产生控制台日志 巴斯德宾: 我正在尝试创建一个计时器,我有一个对象,它的定义如下代码所示: initiate_timer : function(options) { timer = { id: options.id || "ticker", to_display: options.to_display || ['days', 'hours', 'minutes', 'seconds'], ta

我遇到了一个不寻常的JS问题

JS小提琴:

请注意,小提琴不会产生任何结果,只会产生控制台日志

巴斯德宾:

我正在尝试创建一个计时器,我有一个对象,它的定义如下代码所示:

initiate_timer : function(options) {
timer = {
    id: options.id || "ticker",
    to_display: options.to_display || ['days', 'hours', 'minutes', 'seconds'],
    target_date: options.target_date || null,
    time_left: {
        in_days : "0",
        in_hours : "0",
        in_minutes : "0",
        in_seconds : "0"
      }
    }
}
接下来,我计算剩余时间,并将其分为天/小时/分钟/秒,以便显示。当我向控制台显示对象timer时,time_left正确显示

console.log( timer );
Object {
  time_left: Object {
    in_days: "00"
    in_hours: "00"
    in_minutes: 45
    in_seconds: 54
  }
}
但如果我试图直接进入剩下的时间,我突然只得到了NaN

console.log( timer.time_left );
Object {
  in_days: NaN,
  in_hours: NaN, 
  in_minutes: NaN,
  in_seconds: NaN
}
有什么想法吗?请让我知道,如果我可以澄清任何事情,因为这肯定是一个令人困惑的问题


提前感谢

发生的情况是,在记录时,您的对象仍然没有完全初始化,并且充满了NaN

但是,出于性能原因,控制台中的渲染不会立即分开,通常是在第一级属性中:渲染会在稍后完成,当您在控制台中打开对象时,请记住,记录的对象可能非常大,甚至是循环的,因此浏览器很难始终预先计算全部三个属性

假设对象不太大或不太循环,在日志记录时真正查看对象的一种方法是使用

console.log(JSON.stringify(timer));

我怀疑是异步性错误,或者是延迟日志呈现的问题,但是我们没有足够的代码。你能用小提琴再现这个问题吗?谢谢@dystroy,我已经添加了一个产生这个问题的JSFIDLE的链接。另外,JS的pastebin还有更好的方法。这两个console.log行紧挨着,这是令人困惑的部分注:如果您必须记录非常大或循环的对象,而您无法对其进行字符串化,那么您可以使用我创建的库:。感谢您的响应。虽然这可能是准确的,但实际上并没有解决我可能没有正确描述的问题。我也无法使用timer.time\u left.days访问对象。这不仅仅是一个日志问题。我能够重写代码来解决这个问题,但我仍然不知道为什么这种方法不起作用。