zoukankan      html  css  js  c++  java
  • 类数组对象汇总

          JavaScript中有一些看起来像却又不是数组的对象,叫做类数组。 现在要探究类数组的确切含义和高效的使用方式。

       1. 类数组

       一个类数组对象:

    • 具有:指向对象元素的数字索引下标以及 length 属性告诉我们对象的元素个数
    • 不具有:诸如 push 、 forEach 以及 indexOf 等数组对象具有的方法;

       几个典型的类数组的例子是:

    1. DOM方法 document.getElementsByClassName() 的返回结果(实际上许多DOM方法的返回值都是类数组);
    2. 特殊变量 arguments 对象;
    3. input的文件对象FileList

       例如你可以通过以下方法确定函数参数的个数

                 

       你也可以获取单个参数值 :  

                 

       可以遍历获取每个参数的值: 

           

       特性: 可以使用join()方法将类数组对象合并成字符串, 可以使用slice()方法获取类数组对象上的子数组

          

       2. 通用方法

          所谓的通用方法就是不强制要求函数的调用对象 this 必须为数组,仅需要其拥有 length 属性和数字索引下标即可。 通常来讲,你可以用如下的方式在数组 arr 上调用方法 m :

         

        所有的函数都拥有一个 call 方法来让我们用这样一种方式进行上述调用:

         

       我们可以“通用地”使用 forEach方法: 

      3.将类数组对象转化为数组

      有时候处理类数组对象的最好方法是将其转化为数组。 这项工作一般使用如下的方法来完成:

    我们经常会碰到Array.prototype.slice.call(arguments,1)这种用法,这句话的意思就是说把调用方法的参数截取出来:

          function test(a,b,c,d){
                   var arg = Array.prototype.slice.call(arguments, 1);
                   console.log(arg);
           }
           test('a','b','c','d');// ['b','c','d'];

    在这里,增加一个转为数组的通用方法:

    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;
        }
    }

    4. 类数组判断

     《javascript权威指南》上给出了代码用来判断一个对象是否属于“类数组”。如下:

    function isArrayLike(o) {
        if( o // o不是null、undefined等
           && typeof o === 'object' // o的数据类型为'object'
           && isFinite(o.length) // o.length是有限数值
           && o.length >= 0 // o.length为非负值
           && o.length === Math.floor(o.length) // o.length是整数
           && o.length < 4294967296 // o.length < 2^32
        ) return true
        else
           return false
    }
  • 相关阅读:
    angular js 多处获取ajax数据的方法
    回调函数(在原生ajax中应用) 事件监听 与promise的应用介绍
    AngularJS Scope(作用域)
    angular js 模型 (ng-model指令)
    angular js 指令 ng-model与 no-repeat的使用 ng-各种指令 创建自定义指令 限制使用指令 restrict的不同取值
    Ka的回溯编程练习 Part2|八皇后问题和N皇后问题
    Ka的回溯编程练习 Part1|整划什么的。。
    Ka的递归编程练习 Final.Part8|回溯前传二|排列组合
    Ka的递归编程练习 Part7|回溯前传一|素数环!
    Ka的递归编程练习 Part6|简单背包问题,拒绝动规从我做起
  • 原文地址:https://www.cnblogs.com/xuzhudong/p/8064304.html
Copyright © 2011-2022 走看看