zoukankan      html  css  js  c++  java
  • 数组的理解 并且 如何判断一个对象是否是数组

    这个问题看似简单,实际上不简单。

    首先我们来了解一下数组

    var arr = [1,2,3]

    这里是字面量方法创建一个数组,相当于 var arr = new Array(), Array是构造函数/类,arr.__proto__ === Array.prototype, 像push()方法,其实是 Array.prototype.push(),所以说arr实例随想能访问到push()方法

    像 Array.isArray() 是 Array这个构造函数自身的方法也就是静态方法,

    var arr = [1, 2, 3];

    上面这个arr对象,我们可以有很多办法判断它是不是数组

    arr.constructor === Array; //true 通过构造函数判断
    arr instanceof Array; //true 通过prototype判断
    Array.isArray(arr); //true 通过Array类的静态方法判断
    Object.prototype.toString.call(arr) === "[object Array]"; //true 通过toString方法判断

    我们现在来创建一个不是数组的对象

    var arr = [1, 2, 3];
    var obj = Object.create(arr);

    然后我们用上面3个方法判断一下

    obj.constructor === Array; //true 通过构造函数判断
    obj instanceof Array; //true 通过prototype判断
    Array.isArray(obj); //false 通过Array类的静态方法判断
    Object.prototype.toString.call(obj) === "[object Array]"; //false 通过toString方法判断

    只有Array.isArray和toString方法可以正确判断,所以以后别再用其他方法了~ 

  • 相关阅读:
    n-1位数
    关于VC预定义常量_WIN32,WIN32,_WIN64
    python中的闭包
    TCP粘包, UDP丢包, nagle算法
    C++中 explicit的用法
    为什么mysql索引要使用B+树,而不是B树,红黑树
    屏障和屏障属性
    带有超时的读写锁
    pthread_mutex_timedlock
    段错误以及调试方式
  • 原文地址:https://www.cnblogs.com/shun1015/p/14305603.html
Copyright © 2011-2022 走看看