代码之家  ›  专栏  ›  技术社区  ›  AL-zami

Array.protocol.unshift.call(arguments,….)如何实现?

  •  2
  • AL-zami  · 技术社区  · 10 年前

    我试图在参数上实现不同的数组方法,只是为了实验目的。我能够使用切片和连接方法。但我无法确定如何使用unshift方法在参数列表中添加额外的元素。这会产生意外的结果。它会给出值3,我不知道它是从何处混合的。如何做到这一点?

    <html>
      <body>
        <script>
          function init(){
    
            console.log(arguments);
            console.log(arguments.length);
            console.log(Array.prototype.join.call(arguments,'__'));
            console.log(Array.prototype.unshift.call(arguments));
          }
          init(1,2,3);
        </script>
      </body>
    </html>

    结果:

    Arguments { 0: 1, 1: 2, 2: 3, 2 more… } 
    3 
    "1__2__3" 
    3
    
    2 回复  |  直到 8 年前
        1
  •  4
  •   JLRishe    10 年前

    从…起 MDN :

    退换商品 调用方法的对象的新长度属性。

    它又回来了 3 因为 arguments.length 当您调用它时为3,并且没有向该方法传递任何新元素。

    您应该可以拨打:

    console.log(Array.prototype.unshift.call(arguments, "a", "b", "c")));
    console.log(arguments);
    

    请参见:

    6
    Arguments { 0: "a", 1: "b", 2: "c", 3: 1, 4: 2, 5: 3, 2 more… } 
    
        2
  •  1
  •   nzifnab    10 年前

    那是因为 unshift 返回已修改数组中的元素数,但在适当位置修改数组:

    array = [1,2,3]
    // [1, 2, 3]
    array.unshift(7)
    // 4
    array
    // [7, 1, 2, 3]