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

rva*_*ort 5 javascript google-chrome

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

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

我尝试设置"id"属性并获取异常.

我试过了两个:

record['id'] = 'wtf';
Run Code Online (Sandbox Code Playgroud)

并且

record.id = 'wtf';
Run Code Online (Sandbox Code Playgroud)

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

替代文字

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

Mat*_*ley 15

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

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

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

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

    record.id = 'wtf';
}
Run Code Online (Sandbox Code Playgroud)

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

对于作用于函数的变量声明,你是正确的,但是直到你到达代码中的那一点才能进行赋值.record在范围内,但它仍然有其默认值,undefined因为你还没有分配任何东西.