【问题标题】:Cannot Set Property ... of undefined --- bizarre无法设置未定义的属性......奇怪
【发布时间】:2011-05-10 23:46:08
【问题描述】:

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

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

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

我都试过了:

record['id'] = 'wtf';

还有

record.id = 'wtf';

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

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

【问题讨论】:

  • 我无法重现该错误(在 Mac 上的 Chrome 7 和 Firefox 上)。从这里的信息和屏幕截图来看,您的代码似乎没有任何问题。 “错误”行之前的record 的值是多少?

标签: javascript google-chrome


【解决方案1】:

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

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

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

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

    record.id = 'wtf';
}

除非你真的想在这两种情况下都初始化record

关于变量 declarations 被限定为函数是正确的,但是 assignment 直到你到达代码中的那个点才会发生。 record 在范围内,但它的默认值仍然是 undefined,因为您还没有为它分配任何东西。

【讨论】:

  • 哇。有些错误是自己造成的。不错的收获!
【解决方案2】:

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

【讨论】:

  • 其实,我想我刚才已经解决了这个问题……但我仍然不确定为什么会这样。我将记录的定义移到 if 块之外,它似乎有效......我将更新主要问题。
  • @rvandervort:如果您确实发现了原因,请务必分享原因!
猜你喜欢
  • 1970-01-01
  • 2021-11-27
  • 2022-10-30
  • 2023-02-10
  • 2015-12-07
  • 2013-05-28
  • 2016-02-23
  • 2011-11-20
相关资源
最近更新 更多