代码之家  ›  专栏  ›  技术社区  ›  ThomasRones

Javascript数组反向混淆

  •  0
  • ThomasRones  · 技术社区  · 4 年前

    在下面的示例中,当我登录到控制台时,我得到了所有三个数组的[“c”,“b”,“a”]。

    let x = Array.from("abc");
    let y = x;
    let z = y.reverse();
    console.log({x:x, y:y, z:z})
    

    y=[“c”,“b”,“a”],因为Array.prototype.reverse()会反转数组 到位

    z=[“c”,“b”,“a”],因为我反转了y,然后将其赋值给z

    但是为什么x=[“c”,“b”,“a”]?

    2 回复  |  直到 4 年前
        1
  •  1
  •   CertainPerformance    4 年前

    该脚本只创建一个数组:

    let x = Array.from("abc");
    

    这个 Array.from 创建数组并将其分配给 x .

    let y = x;
    

    上述内容创建了 y 变量名,并将其指向同一数组。

    let z = y.reverse();
    

    上述操作将数组反转到位,并创建 z 变量名,并将其指向所述数组。

    数组永远不会被克隆,所以 x , y ,以及 z 都是指内存中的同一个数组。

        2
  •  1
  •   mr hr    4 年前

    当你指定y=x时,你传递的是x的引用。因此,通过扩展运算符复制x。

    let x = Array.from("abc");
    let y = [...x];
    let z = y.reverse();
    console.log({x:x, y:y, z:z})