• 对Array.prototype.slice.call()方法的理解


    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 
    如:

    var a={length:2,0:'first',1:'second'};//类数组,有length属性,长度为2,第0个是first,第1个是second
    console.log(Array.prototype.slice.call(a,0));// ["first", "second"],调用数组的slice(0);
    
    var a={length:2,0:'first',1:'second'};
    console.log(Array.prototype.slice.call(a,1));//["second"],调用数组的slice(1);
    
    var a={0:'first',1:'second'};//去掉length属性,返回一个空数组
    console.log(Array.prototype.slice.call(a,0));//[]
    
    function test(){
      console.log(Array.prototype.slice.call(arguments,0));//["a", "b", "c"],slice(0)
      console.log(Array.prototype.slice.call(arguments,1));//["b", "c"],slice(1)
    }
    test("a","b","c");




    补充: 
    将函数的实际参数转换成数组的方法

    方法一:var args = Array.prototype.slice.call(arguments);

    方法二:var args = [].slice.call(arguments, 0);

    方法三:

    var args = []; 
    for (var i = 1; i < arguments.length; i++) { 
        args.push(arguments[i]);
    }

    最后,附个转成数组的通用函数

    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;
        }
    }
  • 相关阅读:
    mysql中lock tables与unlock tables(锁表/解锁)使用总结
    php开始,html应用的一些不错收藏
    正则表达总结
    yii2 安装
    Nginx出现413 Request Entity Too Large错误解决方法
    jQuery中使用ajaxSubmit提交表单
    Go Log模块生成日志文件
    Go sync模块
    Golang html encoding解析
    Go struct tag
  • 原文地址:https://www.cnblogs.com/web-chuanfa/p/10721463.html
Copyright © 2020-2023  润新知