【发布时间】:2011-02-04 22:27:55
【问题描述】:
我有这样的事情:
var test = {};
function blah() {
test[2] = 'filled';
}
blah(); // ! Hopefully confusion is now averted..
console.log(test);
//result test -> 2:"filled"
console.log(test[2]);
//result undefined
我不明白为什么我在第二个实例中得到“未定义”,而根据第一个实例,该对象的属性显然存在!
有人有什么想法吗?
谢谢
好的,似乎人们对代码存在于什么上下文感到困惑,为了清楚起见,我现在添加了对 blah() 的调用。但请参考 Jeff B 回复下的评论!
以下是相关代码的示例:
mydb = ..... //gets created here with relevant credentials
var test = {};
mydb.transaction(
function(transaction) {
transaction.executeSql("select * from mytable;", [], function(transaction,result) {
var r = result.rows.item(0);
test[2] = r.title;
}, errorHandler);
});
console.log(test);
//result test -> 2:"the title"
console.log(test[2]);
//result undefined
@Dancrumb 你提到的 Javascript 的单线程给了我一个想法,我尝试了这个:
window.setTimeout(function(){ alert(test[2]); },2000);
它成功了!我得到了警报的预期值。你能建议我如何在不使用上述“黑客”的情况下解决这个问题吗?
【问题讨论】:
-
您没有显示所有代码,或者您在对第一个
console.log的结果撒谎。 -
我不明白你为什么首先得到
2:filled(没有运行blah())。 -
不。我刚刚在 Firebug 控制台中运行了它,您在
console.log(test)之后的评论不正确 -
出于显而易见的原因,我没有显示所有代码,但我可以向你保证,我不会对我第一次调用控制台的结果撒谎!
-
@Newbie,在 Firebug 中运行该代码不会产生您所说的结果。我并不是说您在编造,只是您提供的示例代码不会重现您所看到的问题。
标签: javascript arrays variables object