• 关于类数组对象的类数组操作


    怎么理解类数组对象

    javascript有个很特别的东西,类数组。什么是类数组呢,应该都听说过js函数中的arguments,除了这个还有很多很多。

    比如说:string就是个类数组,你可以取string[3]获得第四个字符,也可以string.length

        DOM元素的childNodes,用querySelectorAll选中的全部元素,还有jQeury也是很经典的类数组对象。

    为什么他们是呢,因为他们都是对象,没有继承Array,但是他们有0,1,2,3下标,也有length;

    神奇。。。

    在这我们造一个类数组玩玩。

    var arr = [ 1 , 2 , 3 ]    //制造一个数组
    var arrCopy = {}        //一个假的数组
    for( var i = 0 ; i < arr.length ; i++ ){
        arrCopy[i] = arr[i]    //假数组获得了真数组的所有元素了
    }
    arrCopy.length = arr.length ;  //假数组还有长度
    arrCopy.say = function(){
        console.log(" i am not arr ")  //假数组居然还有了say方法
    }

     console.log("下边这是真的arr")
     console.log(arr)
     console.log("下边这是arrCopy")
     console.log(arrCopy)

    
    

    上面我们构造了一个对象,这个对象居然有“下标”,本质上这个不是下标,字符串属性而已。他还有length,也是人造的而已啦。

    那么这个类数组有什么意义呢

    它获得了数组以下标为属性值的性质和length长度属性,更便捷的获取元素和操作,但是他不能使用array的任何方法。因为没有继承到。但是他有其他的方法,这是array所没有的。

    类数组操作

    好多人会觉得,好可惜呀,我的类数组对象不能map, forEach, every是一件多么难受的事情啊。

    其实操作方法很简单利用call就可以了

    [].map.call(arrCopy,function(elem,index){
      return elem*elem
    })

     同理其他的方法也一样

    this指向问题,forEach map这些会把指向改变,他们有第二个参数this指向的是第二个参数;

    类数组对象和数组的转化

    var newArr = [].slice.call(arrCopy);

    这样就可以返回一个新的数组和arrCopy一样,简单省事。

  • 相关阅读:
    SOA精华的内容和实用的知识
    众多SEO专家集体盛赞
    黑客大曝光:VoIP安全机密与解决方案
    博文视点大讲堂41期SEO难点之网站内部链接结构
    TransactSQL管理与开发实例精粹
    千万不要错过云计算兴起的时代
    《海量数据库解决方案》之位图索引的结构和特征
    Oracle开发艺术
    Android应用程序的开发
    BizTalk Accelerator for HL7医疗行业消息路由处理机制
  • 原文地址:https://www.cnblogs.com/sowhite/p/6395940.html
Copyright © 2020-2023  润新知