给出以下代码:

    var old_Array =["One","Two","..."];
    var len = old_Array .length;
    var new_Array =[];
    for(var i=0;i<len;++i)
    {
      new_Array.push(old_Array [i]); // ----- [1]
    }

[1]行之后, new_Array用字符串填充。
  • 是每个元素实际上是对字符串元素的引用old_Array,还是每个字符串元素的副本?
  • JavaScript解释器/编译器是否优化行- [1] ,作者:
    old_Array中推送每个字符串元素的引用?
  • 最佳答案

    第一个问题的答案:每个元素只是旧数组每个字符串元素的副本。
    如果数组包含对象引用,则将引用复制到新数组中。 (在这种情况下,原始类型(如字符串和数字)将按值复制。)

    回答第二个问题:不,JavaScript解释器不会通过推送old_Array中每个字符串元素的引用来优化第[1]行。

    一种更快更好的复制数组的方法是:

    var new_Array = old_Array.slice();
    

    它将克隆旧阵列,并将引用返回到新阵列。

    10-01 06:05