JS判断一个对象是不是数组的几种方式

错误: typeof()——只能区分原始类型和function,无法区分内置对象类型

 解决:

  1. 判断原型对象: var bool=father.isPrototypeOf(child);

          判断father是不是child的父对象。

  2. 判断构造函数: 

    var bool=child instanceof 构造函数
    判断child是不是用指定的构造函数创建出来的
    instance: 实例: 用构造函数创建出的一个子对象
    实例化: 用new调用构造函数创建一个对象

  问题: 前两个检查不仅检查直接父对象,而且还检查整个原型链。

  解决:

  3. 检查对象的class属性:  和原型链无关

    每个对象中都有一个内部属性class: 记录了对象创建时的类型。一旦创建,不会更改。

    问题1: class不允许用.直接访问

      解决: obj.toString() -> "[object class]"

        其中class可能为: Object Array Date ...

    问题2: 多数内置对象重写了toString方法

      重写的toString方法已经无法返回class

    解决: 临时借用函数:

      函数.call(对象)  -> 对象.函数()

      Object.prototype.toString.call(obj1) -> obj1.toString();

  4. ES5 : Array.isArray(obj)

原文地址:https://www.cnblogs.com/adolfvicto/p/7490891.html