我在Chrome中遇到了一个奇怪的错误...请查看下面的截图。
我使用对象文字语法定义记录。
我尝试设置“id”属性并获取异常。
我试过了两个:
record['id'] = 'wtf';
以及
record.id = 'wtf';
我在我的脚本中使用这种类型的语法......这里可能会发生什么? 这是Chrome中的错误吗?
编辑: 我现在已经解决了这个问题,但我仍然不确定为什么会这样。 我将记录的定义移到了if块之外。有谁知道会发生什么?我认为所有变量声明都是作用于函数的,所以这应该不是问题。
答案 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)
怎么办?你试过调试吗?