美文网首页
判断一个对象是否是数组,以及数组与伪数组

判断一个对象是否是数组,以及数组与伪数组

作者: milletmi | 来源:发表于2018-06-22 10:29 被阅读0次

    在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(Function)。
    基本数据类型:String,boolean,Number,Undefined, Null
    引用数据类型:Object(Array,Date,RegExp,Function)

    1、创建对象

    var obj = {}; //种方式创建对象,被称之为对象直接量(Object Literal)
    var obj = new Object(); // 创建一个空对象,和{}一样
    

    2、创建数组

    var arr = [];//这是使用数组直接量(Array Literal)创建数组
    var arr = new Array();//构造函数Array() 创建数组对象
    

    3、对象与数组的关系
    在说区别之前,需要先提到另外一个知识,就是JavaScript的原型继承。所有JavaScript的内置构造函数都是继承自 Object.prototype。在这个前提下,可以理解为使用 new Array() 或 [] 创建出来的数组对象,都会拥有 Object.prototype 的属性值。

    var obj = {};// 拥有Object.prototype的属性值
    var arr = [];
    //使用数组直接量创建的数组,由于Array.prototype的属性继承自 Object.prototype,
    //那么,它将同时拥有Array.prototype和Object.prototype的属性值
    

    4、什么是数组
    数组具有一个最基本特征:索引,这是对象所没有的

    5、伪数组
    定义:
    1、拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
    2、不具有数组所具有的方法
    伪数组,就是像数组一样有 length 属性,也有 0、1、2、3 等属性的对象,看起来就像数组一样,但不是数组,比如

    var fakeArray = {
        length: 3,
        "0": "first",
        "1": "second",
        "2": "third"
    };
    

    常见的参数的参数 arguments,DOM 对象列表(比如通过 document.getElementsByTags 得到的列表),jQuery 对象(比如 $("div"))。

    判断是否是数组

    fakeArray instanceof Array === false;
    Object.prototype.toString.call(fakeArray)
    Array.isArray(fakeArray)
    

    伪数组存在的意义,是可以让普通的对象也能正常使用数组的很多算法,比如:

    var arr = Array.prototype.slice.call(arguments)
     
    或者
    var arr = Array.prototype.slice.call(arguments, 0); // 将arguments对象转换成一个真正的数组
     
    Array.prototype.forEach.call(arguments, function(v) {
      // 循环arguments对象
    });
    

    相关文章

      网友评论

          本文标题:判断一个对象是否是数组,以及数组与伪数组

          本文链接:https://www.haomeiwen.com/subject/cgkxyftx.html