【问题标题】:JavaScript: How to create new object properties/members and assign values inside a For Loop?JavaScript:如何在 For 循环中创建新的对象属性/成员并赋值?
【发布时间】:2015-05-24 14:51:12
【问题描述】:

我正在尝试创建一个函数来为对象属性/成员创建和赋值。但我得到了错误:

未捕获的类型错误:无法读取未定义的属性“id”

函数假设创建一个名为'id'的属性/成员,也是假设 为新创建的属性/成员赋值

    var add_Ids = function(array,index) {
        for(var iii = 1; iii <= 3; iii++) {
            array[index+iii].id = (array[index].id * 4)+iii;
        }
        array[index].id *= 4;
    };

array 是我传入函数的数组。

index 是数组中从 For 循环开始的位置

附: For 循环不会覆盖任何重要的东西。 与“array[index+iii]”对应的元素为空。

【问题讨论】:

  • 如果“与“array[index+iii]”对应的元素为空。”实际上意味着“array[index+iii] 未定义”,这似乎不言自明。
  • (嗯,也可以是array[index]..)
  • 那么你想用这个实现什么?

标签: javascript arrays for-loop javascript-objects typeerror


【解决方案1】:
array[index+iii].id = (array[index].id * 4)+iii;

如果array[index+iii] 之前是undefined,那么array[index+iii].id 会给出你提到的错误。

所以在访问id之前检查该属性是否存在。

if(!array[index+iii]) array[index+iii] = {}; // initializing if its not present.
array[index+iii].id = (array[index].id * 4)+iii;

【讨论】:

    【解决方案2】:

    这里有几件事在起作用。

    数组元素必须存在才能被操作。考虑这段代码 -

    var my = []; 
    my[0].id = 1; // TypeError: Cannot set property 'id' of undefined
    

    这是因为正如错误所述,my[0] 在此处未定义。由于您的数组被传递到函数中,请执行以下操作之一(取决于此函数的情况/要求):

    • 确保只传入符合函数标准的数组。在这种情况下,您的函数需要一个包含 3 个索引元素的数组 [iii+index,iii+index+3]。
    • 确保传入的计数不会导致操作超过传入数组的长度。
    • 失败并显示有意义的错误消息 - 测试未定义,如果是,则生成有意义的错误。
    • 如果这与您正在执行的操作相匹配,您可以检查undefined 并在需要时设置默认选项。

    最后一个例子:

    var add_ids = function(array, index) { 
        for (var i = 1, i <= 3; i++) { 
            if (!array[index + i]) { 
                array[index + i] = generateDefaultObject(); 
            }
            array[index + i].id = (array[index].id * 4) + i;
        }
        array[index].id *= 4
    }
    

    其次,您似乎希望这会起作用。它类似于 JavaScript 的隐式全局声明。例如:

    my = 4; // my didn't exist before this line, but now does as a global
    

    是(不幸的是)有效的 JavaScript。数组不支持元素的这种声明——它们需要在你使用它们之前存在。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2018-11-02
      • 1970-01-01
      相关资源
      最近更新 更多