【问题标题】:Javascript array goes undefinedJavascript数组未定义
【发布时间】:2014-02-06 10:26:16
【问题描述】:

我有一个将值分配给数组的 javascript 函数:

var myArray = [];
myArray =  myFunction();
next Statement;

当我进入下一条语句时,数组已经未定义,但是如果我注释掉

myArray = myFunction(); 

数组仍然在下一条语句中定义。

请有人解释发生了什么。

【问题讨论】:

  • 你是在拖钓还是什么?在将 myArray 分配给函数的返回值之后,您期望它是什么?
  • 那么,“myFunction”函数的主体内部是什么?它似乎没有返回值。
  • myFunction 是这样的:function myFunction(row) { myArray[row] = [anotherArray]; };
  • 好的,我现在知道了。我只需要编写 myFunction();没有分配给任何东西。

标签: javascript arrays scope


【解决方案1】:
var myArray = [];

您声明myArray 并为其分配一个新的空数组对象。

myArray =  myFunction();

您将调用myFunction 的返回值分配给myArray

这会覆盖之前的值。

您没有向我们展示myFunction 的代码,但推测它返回undefined(可能是因为它有一个未定义值的return 语句,或者它根本没有return 语句。

不再有对最初在第 1 行创建的数组的任何引用,因此该数组被垃圾回收。


我有一个为数组赋值的 javascript 函数

如果你想为数组赋值,那么你需要指定你想赋值的数组的索引:

myArray[0] = myFunction();

或使用push 之类的东西将其添加到末尾。

myArray.push(myFunction());

您可能希望myFunction 返回除undefined 以外的其他内容。


myFunction 的实现可能会直接修改数组,例如...

function myFunction () {
    myArray.push(1);
}

...在这种情况下,如果您刚刚删除了将返回值分配给先前引用数组的变量的部分,那么您的原始代码将起作用:

/* myArray = */ myFunction();

【讨论】:

    【解决方案2】:

    这是因为你没有在函数内部返回任何值,所以默认情况下它不会返回任何内容,从而使你的数组​​未定义。

    如果您想将一个完整的数组分配给 myArray,请在您的函数中返回该数组。

    或者如果你只是想在你的函数中向 myArray 添加元素,使用 push() 方法,例如myArray.push(元素);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-13
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多