Javascript 无法设置属性。。。未定义的——奇怪的

Javascript 无法设置属性。。。未定义的——奇怪的,javascript,google-chrome,Javascript,Google Chrome,我在Chrome上发现了一个奇怪的错误。。。查看下面的屏幕截图 我使用对象文字语法定义记录 我尝试设置“id”属性并获得异常 我两个都试过了: record['id'] = 'wtf'; 而且 record.id = 'wtf'; 我在脚本中到处都使用这种语法。。。。这到底是怎么回事? 这是Chrome中的一个bug吗 编辑: 我现在已经解决了这个问题,但我仍然不知道为什么会发生这种情况。 我将记录的定义移动到if块之外。有人知道会发生什么吗?我认为所有变量声明的作用域都是函数,因此这不应

我在Chrome上发现了一个奇怪的错误。。。查看下面的屏幕截图

我使用对象文字语法定义记录

我尝试设置“id”属性并获得异常

我两个都试过了:

record['id'] = 'wtf';
而且

record.id = 'wtf';
我在脚本中到处都使用这种语法。。。。这到底是怎么回事? 这是Chrome中的一个bug吗

编辑: 我现在已经解决了这个问题,但我仍然不知道为什么会发生这种情况。
我将记录的定义移动到if块之外。有人知道会发生什么吗?我认为所有变量声明的作用域都是函数,因此这不应该是一个问题。

对我有效,没有理由不起作用。你确定是指那条线吗?如果在设置警报(记录)之前设置警报(记录)会怎么样?您试过调试它了吗?

问题很可能是
dl
小于或等于零,因此初始化
record
的语句无法执行。从缩进来看,这两条语句似乎都是
if
块的一部分,但是没有大括号,
记录['id']='wtf'语句

通过将变量初始化移到if语句之外,您可以在任何情况下强制它发生,并将赋值移到if块内部(我假设这是您想要的)

可能更好的解决方法是添加如下大括号:

if (dl > 0) {
    var record = {};

    record.id = 'wtf';
}
除非您真的想在这两种情况下初始化
记录


关于将变量声明的作用域限定到函数,您是正确的,但是直到代码中的这一点,赋值才会发生<代码>记录
在范围内,但它的默认值仍然是
未定义
,因为您尚未为其分配任何内容。

实际上,我想我刚才已经解决了问题。。。但我仍然不知道为什么会发生这种情况。我把记录的定义移到了if块之外,它似乎起了作用。。。我将更新主要问题。@rvandervort:如果你确实发现了原因,请务必分享原因!我无法重现错误(在Chrome7和Mac上的Firefox上)。从这里的信息和屏幕截图来看,您的代码似乎没有问题。“错误”行前面的
记录的值是多少?哇。有些虫子是自己造成的。接得好!