判断数据类型是数组还是对象(constructor、instanceof、toString())

平时遇到需要判断数据类型的时候第一反应是用typeof() 方法,但是用这种方法来判断是数组还是对象是判断不出来的,比如

判断出的结果都是object类型, 那么有什么办法可以帮助我们来区分这两种类型呢?

方法一:constructor

官方解释是constructor 属性返回对创建此对象的数组函数的引用。官方的解释一般都不是人能看懂的,其实 constructor 原本就是用来进行对象类型判断的,但是还有一个作用就是官方的解释 的意思: 每一个对象实例都可以通过 constrcutor 对象访问它的构造函数

比如

这里就不详细说了,要不又要说构造函数,__proto__,构造函数的prototype属性,原型,原型链,那就扯远了,那么constructor怎么用来判断对象属性呢?

可以看到打印出来一个是Array(); 一个是Object();

方法二: instanceof

根据返回的布尔值来判断;

我个人理解instanceof意思是  A原型链上有没有B原型;

B是A实例对象,所以B的原型链的上一级就是A,所以B instanceof A == true; 而Object属于原型链上的顶点,之后是null;

所以 A instanceof Object == true;   B instanceof Object  == true; 

 

可以看到 obj instanceof Array == false

 

方法三: toString()

Object.prototype里面有个toString()方法

Object.prototype.toString = function(){

     在函数里this正常指向的就是调用这个函数的对象, js中call()方法是改变this的指向, a.call(b),  b替换了a

}

Object.prototype.toString.call([ ]),  [ ]替换了Object.prototype;

可以看到 当call()当中用数组的时候打印出的是Array,  用对象的时候打印出的是Object;

不知道之前不知道,知道之后居然有三种方法这么多,知识无尽,让我们一起努力;

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值