我有一段Javascript / Coffeescript似乎无序执行。
console.log list
console.log list[card_number]
if list[card_number]
console.log "MATCHES"
new_card = list[card_number]
else
console.log "NO MATCHES"
new_card = create_new_card(card_number)
create_new_card: (card_number) ->
new_card =
card_number: card_number
list[new_card.card_number] = new_card
return new_card
每次运行时,第一个console.log
会显示包含new_card的卡片列表,即使尚未创建卡片。然后它总是命中else
,无论它运行多少次。
如果我在此代码运行后尝试在Javascript控制台中运行list[<card_number>]
,我会收到正确的对象,但每次代码运行时,都会发生相同的事件。
答案 0 :(得分:5)
在谷歌浏览器中,如果要记录具有日志记录状态的对象,则需要记录克隆对象或将其字符串化。
var a = [];
console.log(a);
a[0] = 3;
将记录[3]
,因为它记录了一个活动对象,而这将记录[]
:
var a = [];
console.log(JSON.parse(JSON.stringify(a)));
a[0] = 3;
它也是一个活动对象日志记录,但它是在a
没有任何项目时克隆的一次性克隆。
这与@CallumRogers指出的代码中可能存在的逻辑错误无关。
答案 1 :(得分:1)
您的create_new_card
功能有误 - 您拨打new_card.number
而不是new_card.card_number
,这会导致undefined
被添加到列表中,从而导致您观察到的行为。正确的版本是:
create_new_card: (card_number) ->
new_card =
card_number: card_number
list[new_card.card_number] = new_card
return new_card
答案 2 :(得分:1)
您使用的是Chrome吗? console.log
does not execute immediately。这是一种耻辱,但对我们来说太糟糕了。