美文网首页
类数组转化为数组

类数组转化为数组

作者: 没了提心吊胆的稗子 | 来源:发表于2019-07-30 14:14 被阅读0次
    // 求平均数
        function avgFn(){
            // 将类数组转化为数组
            var ary = [];
            for (var i = 0; i < arguments.length; i++) {
                ary[ary.length] = arguments[i];
            }
            ary.sort(function (a, b) {
                return a - b;
            });
            // 删除排序后的第一个和最后一个
            ary.shift();
            ary.pop();
            return (eval(ary.join('+')) / ary.length).toFixed(2);
        }
    

    模拟内置slice实现数组克隆

    Array.prototype.mySlice = function () {
           var ary = [];
           for (var i = 0; i < this.length; i++) {
               ary[ary.length] = this[i];
           }
           return ary;
       };
    

    优化类数组转数组的代码:借用数组原型上的slice方法,将arguments转化为数组

    function avgFn(){
            // 将类数组转化为数组
            Array.prototype.slice.call(arguments);
            // same as
            [].slice.call(arguments);
        }
    

    换一种思路:不转化成数组,直接对arguments排序,借用数组原型上的方法

    function avgFn1() {
            [].sort.call(arguments, function (a, b) {
                return a - b;
            });
            [].shift.call(arguments);
            [].pop.call(arguments);
            return (eval([].join.call(arguments, '+')) / arguments.length).toFixed(2);
        }
    
    // 两个都是类数组集合
    // 获取到的是元素集合HTMLCollection
    document.getElementByTagName()
    // 获取到的是节点集合NodeList
    document.getElementByName()
    

    IE6-8不支持借用数组的slice方法将元素/节点集合转化为数组,但是arguments可以,不兼容时就需要自己写for循环
    使用浏览器异常信息捕获检测兼容与否,try..catch..
    JS中任意一行代码出错,就会停止后面代码的执行,但在try..catch..中,异常捕获之后,不会影响下面代码的执行。若try中代码执行出错,会默认执行catch中的代码,e.message可以收集报错原因

    // 完整写法:
    try{
      // js code
    }catch(e){
      // try中代码出错则会执行这里面的代码
    }finally{
      // 不管try中的代码是否报错,这里面的代码都会执行
    }
    

    若不想出错之后继续执行后面的代码,则可以在catch中手动抛出一条错误信息

    try{
      // js code
    }catch(e){
      throw new Error('啊哦~出错咯!!!');
    }
    

    错误类型
    new ReferenceError -> 引用错误
    new TypeError -> 类型错误
    new RangeError -> 范围错误

    // 兼容的类数组转换方法
    var utils = {
        listToArray: function (likeArray) {
            var ary = [];
            try {
                ary = ary.slice.call(likeArray);
            } catch(e) {
                for (var i = 0; i < likeArray.length; i++) {
                    ary[ary.length] = likeArray[i];
                }
            }
            return ary;
        }
    };
    

    Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)
    Array.from(arguments); 利用数组自带的转化方法

    相关文章

      网友评论

          本文标题:类数组转化为数组

          本文链接:https://www.haomeiwen.com/subject/iqxprctx.html