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

时间:2014-02-11 15:20:07

标签: javascript

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

JS小提琴:http://jsfiddle.net/RD5a4/

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

PasteBin:http://pastebin.com/raw.php?i=AcH79zZv

我正在尝试创建一个计时器,我有一个像这样定义的对象(为了易读性而修剪的代码):

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"
      }
    }
}

再向下我计算剩余的时间并将其分成几天/小时/分钟/秒,以便我可以显示它。当我向控制台显示对象时,time_left正确显示。

console.log( timer );
Object {
  time_left: Object {
    in_days: "00"
    in_hours: "00"
    in_minutes: 45
    in_seconds: 54
  }
}

但如果我尝试直接访问time_left,我突然只能获得NaN。

console.log( timer.time_left );
Object {
  in_days: NaN,
  in_hours: NaN, 
  in_minutes: NaN,
  in_seconds: NaN
}

有什么想法吗?如果我能澄清任何事情,请告诉我,因为这肯定是一个令人困惑的问题。

提前致谢

1 个答案:

答案 0 :(得分:0)

在登录时,您的对象仍未完全初始化并且已满NaN

但是出于性能原因,控制台中的渲染并不是立即的(通常对于第一级属性而言):稍后在控制台中打开对象时(稍后记录已记录的对象可能非常大的甚至是循环的,所以浏览器几乎不能总是预先计算整个三个。)

在记录时真正看到对象的方法(假设它不是太大或不是循环)是使用

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