【问题标题】:How does the slice() function work with the push() function in Javascript?slice() 函数如何与 Javascript 中的 push() 函数一起工作?
【发布时间】:2017-01-03 05:24:33
【问题描述】:

这里ab 的输出相同,但在 slice() 的情况下,我们没有传递任何参数,因此abc 的输出必须相同。那么为什么c 的输出与这里的ab 不同呢?

<!DOCTYPE html>
        <html>
        <head>
        </head>
        <body>
        <p id="1"></p>
        <p id="2"></p>
        <p id="3"></p>
        <p id="4"></p>
        <script>
        var a=["a","b","c"];
        var b=a;
        var c=a.slice();
        a.push("date");
        document.getElementById("1").innerHTML=a;
        document.getElementById("2").innerHTML=b;
        document.getElementById("3").innerHTML=c;
        document.getElementById("4").innerHTML=a;

        </script>
        </body>
        </html>

输出:

a,b,c,date
a,b,c,date
a,b,c
a,b,c,date

【问题讨论】:

  • 您在将新值推送到“日期”数组之前对原始数组进行切片

标签: javascript slice


【解决方案1】:

来自MDN

slice() 方法将数组的一部分的浅拷贝返回到从开始到结束(不包括结束)选择的新数组对象中。原数组不会被修改。

所以ca 的副本,而b 是对它的引用。因此,当您修改 a 时,b 会发生变化,而 c 不会。

【讨论】:

    【解决方案2】:

    在推送新元素之前,您正在对数组进行切片。 slice 还会返回一个新数组,因此“a”数组的引用不会影响您的“c”数组。

    希望这会有所帮助......

    【讨论】:

      【解决方案3】:

      a.slice()slice 函数内没有声明任何值。所以不执行任何操作。而a.slice() != a 。因为你在推入数组之前声明了c=a.slice()Slice() 不会更改数组值。它会将数组值复制到 c 数组。如果您需要啊日期,只需使用 c 数组推送即可

      var a=["a","b","c"];
              var b=a;
              var c=a.slice();
              a.push("date");
              c.push('date')
              document.getElementById("1").innerHTML=a;
              document.getElementById("2").innerHTML=b;
              document.getElementById("3").innerHTML=c;
              document.getElementById("4").innerHTML=a;
      <p id="1"></p>
              <p id="2"></p>
              <p id="3"></p>
              <p id="4"></p>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 2020-09-25
        • 2016-07-27
        相关资源
        最近更新 更多