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. 使用对象创建伪数组,伪数组可以使用部分方法
  • 相关阅读:
    Linux shell脚本基础学习详细介绍(完整版)二
    python读取单个文件操作
    【转载】HTTP 缓存的四种风味与缓存策略
    【转载】HTTP 响应头与状态码
    【转载】HTTP 请求头与请求体
    【转载】HTTP 基础与变迁
    3-2 从单词中获取单词出现的频率信息,并把他们写进对应的列表里
    170925_2 Python socket 创建UDP的服务器端和客户端
    170925_1 Python socket 创建TCP的服务器端和客户端
    2-2 列表推导同 filter 和 map 的比较
  • 原文地址:https://www.cnblogs.com/liudemeng/p/11510275.html
Copyright © 2011-2022 走看看