无法设置属性...未定义---奇异

时间:2010-11-16 18:06:42

标签: javascript google-chrome

我在Chrome中遇到了一个奇怪的错误...请查看下面的截图。

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

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

我试过了两个:

record['id'] = 'wtf';

以及

record.id = 'wtf';

我在我的脚本中使用这种类型的语法......这里可能会发生什么? 这是Chrome中的错误吗?

alt text

编辑: 我现在已经解决了这个问题,但我仍然不确定为什么会这样。 我将记录的定义移到了if块之外。有谁知道会发生什么?我认为所有变量声明都是作用于函数的,所以这应该不是问题。

2 个答案:

答案 0 :(得分:15)

问题很可能是dl小于或等于零,因此初始化record的语句不会被执行。从您的缩进开始,看起来您希望两个语句都成为if块的一部分,但没有大括号,record['id'] = 'wtf';语句无论如何都会被执行。

通过在if语句之外移动变量初始化,你强制它在任何情况下发生并在if块中移动赋值(我假设这是你想要的)。

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

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

    record.id = 'wtf';
}

除非你确实想在两种情况下初始化record

关于变量声明的范围是正确的,但赋值直到你到达代码中的那一点才会发生。 record在范围内,但仍有默认值undefined,因为您尚未为其分配任何内容。

答案 1 :(得分:0)

为我工作,没有理由不应该工作。你确定它指的是那条确切的线吗?如果您在设置之前alert(record)怎么办?你试过调试吗?