zoukankan      html  css  js  c++  java
  • Javascript中将函数参数arguments转为数组

    1. arguments为什么不是数组?如何证明?

    arguments 是没有数组的slice等方法的,所以不是Array类型的。

    验证:

    function testargs(){
        var arr=[1,2,3];
        console.log(typeof arguments.slice);
        console.log(typeof arr.slice);
    }
    testargs();

    输出:

    undefined
    function

    当然,还可以通过其他方式来证明,比如说看constructor等等。

    2. 如何转为数组?

    使用Array的slice方法,如下:

    function arg2arr(){
        var arr = Array.prototype.slice.call(arguments);
        console.log(arr);
    }
    arg2arr(1,2,3);

    输出:[1,2,3]

    还可以写成这样:

    Array.prototype.slice.call(arguments, 0)

    3. 如何使用原生JS实现自己的slice方法

    Array.prototype.slice = function(start,end){
          var result = new Array();
          start = start || 0;
          end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
          for(var i = start; i < end; i++){
               result.push(this[i]);
          }
          return result;
     }

    4. JS中有没有toArray方法?如果没有,如何自己实现一个?

    var toArray = function(s){
         try{
             return Array.prototype.slice.call(s);
         } catch(e){
                 var arr = [];
                 for(var i = 0,len = s.length; i < len; i++){
                     //arr.push(s[i]);
                       arr[i] = s[i];  //据说这样比push快
                 }
                  return arr;
         }
     }
  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/jiji262/p/3041185.html
Copyright © 2011-2022 走看看