zoukankan      html  css  js  c++  java
  • JavaScript数组和伪数组

    伪数组和数组

    记住一句话: 伪数组是一个Object,数组是Array。

    对象和数组之间的关系

    JavaScript的内置函数继承与 Object.prototype

    可以认为new Array()[]创建出来的数组对象, 都拥有Object.prototype属性值。

    var obj = {}; //拥有Object.prototype的属性值
    var arr = []; //由于Array.prototype的属性继承自Object.prototype, 那么它就是拥有两个属性
    // 即Array.prototype和Object.prototype
    

    注意: 对象没有数组的Array.prototype属性值

    什么是数组

    数组的基本特征: 索引(下标)取值

    var obj = {};
    var array = [];
    
    obj[0] = "L";
    array[0] = "L";
    console.log(obj); // {0: "L"}
    
    console.log(obj[0]); // L
    console.log(array[0]); // L
    console.log(obj.length); // undefined
    console.log(array.length); // 1
    
    1. 数组取值是根据索引进行获取值, 而对象是根据键值对进行取值
    2. 对象没有数组的特性(索引),并且obj没有保存属性length,那么就是未定义,所以undefined
    3. 对于数组来讲,length是数组的内置属性,数组根据索引长度来更改length

    什么是伪数组

    1. 具有length属性,其他属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
    2. 不具有数组的方法

    伪数组类似于Python中的字典

    var fakeArray = {
        "0":"胡珺",
        "1":23,
        length:2
    };
    for (var i=0;i<fakeArray.length;i++){
        console.log(fakeArray[i])
    }
    

    常见的伪数组

    • 函数内部的arguments
    • DOM对象列表(document.getElementsByTags)
    • jQuery对象($("div"))

    注意: 伪数组是一个对象

    简单的一个应用

    var obj = {
      0: 'a',
      1: 'b',
      2: 'c',
      length: 3
    }
    ;[].push.call(obj, 'd');
    
    console.log([].slice.call(obj))
    
    ;[].forEach.call(obj, function (num, index) {
      console.log(num)
    })
    

    差别

    1. 对象没有数组的Array.prototype 的属性值,类型是 Object ,而数组类型是 Array
    2. 数组是索引,对象是键值对
    3. 使用对象创建伪数组,伪数组可以使用部分方法
  • 相关阅读:
    时间复杂度和空间复杂度
    七、vue计算属性
    六、vue侦听属性
    四、vue派发更新
    五、vue nextTick
    三、vue依赖收集
    二、vue响应式对象
    递归
    链表
    TypeScript类型定义文件(*.d.ts)生成工具
  • 原文地址:https://www.cnblogs.com/liudemeng/p/11510275.html
Copyright © 2011-2022 走看看