我遇到了一个不同寻常的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
}
有什么想法吗?如果我能澄清任何事情,请告诉我,因为这肯定是一个令人困惑的问题。
提前致谢
答案 0 :(得分:0)
在登录时,您的对象仍未完全初始化并且已满NaN
。
但是出于性能原因,控制台中的渲染并不是立即的(通常对于第一级属性而言):稍后在控制台中打开对象时(稍后记录已记录的对象可能非常大的甚至是循环的,所以浏览器几乎不能总是预先计算整个三个。)
在记录时真正看到对象的方法(假设它不是太大或不是循环)是使用
console.log(JSON.stringify(timer));