Javascript对象值在定义时显示为NaN
我遇到了一个不寻常的JS问题 JS小提琴: 请注意,小提琴不会产生任何结果,只会产生控制台日志 巴斯德宾: 我正在尝试创建一个计时器,我有一个对象,它的定义如下代码所示: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
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访问对象。这不仅仅是一个日志问题。我能够重写代码来解决这个问题,但我仍然不知道为什么这种方法不起作用。