zoukankan      html  css  js  c++  java
  • js 类数组

    基本原则
    类数组为对象,但有一些数组的方法,用起来像数组,因为其本质为对象,也有对象的用法
    属性要为索引(数字)属性,必须有length属性,最好加上push方法
    举例子
    var obj = {
        0: 'a',
        1: 'a',
        2: 'a',
        3: 'b',
        length: 4,
        push: Array.prototype.push
    }
    obj.push('b');
    obj.length; //5
    obj[4]; // b
    这就是一个类数组,你发现可以使用数组的方法,像数组一样访问值,实际上,深入去看你会发现,obj.push调用的是数组的push方法,obj.length访问的是自己的属性,obj[4]访问的也是自己的属性。
    
    智力题
    var obj = {
        2: 'a',
        3: 'b',
        length: 2,
        push: Array.prototype.push
    }
    obj.push('c','d','e');
    控制台打印obj,你会发现它是长这样子的:
    
     
    
    为啥呢,根据之前类数组的push表现,你大概可以猜到,在类数组里面,Array.prototype.push大致表现如下:
    
    Array.prototype.push = function() {
    //传入参数个数
    var len = arguments.length;
        for(var i = 0; i < len; i++){
            //属性赋值
            this[this.length] = arguments[i];
            //将类数组length属性加1
            this.length++;
        }
        return this.length;
    }
    所以,你执行obj.push('c','d','e')时,首先调用了Array.prototype.push,然后进行对象属性赋值,第一次,直接为属性2赋值,接着为3赋值,之后为4赋值,所以2/3属性值均被覆盖,4由于原来没有,赋值相当于增加了一个属性。
    
     
    
    所以,从上面来看,用类数组时时刻要记住,它的本质是一个对象!可以像数组那么访问值及使用,但不能用数组的思维去看它。
    
    另外,在DOM和BOM中,系统生成的数组样的大部分均为类数组。
    ————————————————
    
    版权声明:本文为CSDN博主「bingqise5193」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/bingqise5193/java/article/details/100170587
  • 相关阅读:
    UITabbarItem只显示图标
    [转]translatesAutoresizingMaskIntoConstraints详解
    [转载]podfile语法
    获取数组NSArray元素的className
    HTTP的FormData和Payload的传输格式
    WCDB错误"No matching constructor for initialization of 'WCTColumnBinding'"
    UIStakView的添加与移除
    为什么说Python采用的是基于值的内存管理模式?
    PostgreSQL数据库
    标准库 time
  • 原文地址:https://www.cnblogs.com/chenzxl/p/13288866.html
Copyright © 2011-2022 走看看