五种方法判断一个对象是不是数组类型

typeof初步判断

typeof 只能判断原始类型的值和函数 五种基本数据类型 null number string boolean undefined 和一种引用数据类型 Object

进一步检测

第一种isPrototypeOf

isPrototypeOf 判断父及对象 可检查整个原型链 //可能继承自数组

 console.log(Array.prototype.isPrototypeOf([])?"是数组":"不是数组");
  console.log(Array.prototype.isPrototypeOf({})?"是数组":"不是数组");
  console.log(Array.prototype.isPrototypeOf(function(){})?"是数组":"不是数组");

第二种constructor

constructor 检查指定对象的构造函数 可检查整个原型链 //可能继承自数组

  var father={};
  var son={};
  father.__proto__=Array.prototype;
  son.__proto__=father;
  console.log(son.contructor==Array?"是数组":"不是数组")
  console.log({}.contructor==Array?"是数组":"不是数组");
  console.log(function(){}.contructor==Array?"是数组":"不是数组");

第三种instanceof

instanceof 检查一个对象是否是制定构造函数的实例 可检查整个原型链 //可能继承自数组

  var father={};
  var son={};
  father.__proto__=Array.prototype;
  son.__proto__=father;
  console.log(son instanceof Array?"是数组":"不是数组");
  console.log({} instanceof Array?"是数组":"不是数组");
  console.log(function(){} instanceof Array?"是数组":"不是数组");

第四种Object.prototype.toString.call()

强行用要检查的对象,调用原始的toString方法 不检查整个原型链

      console.log(Object.prototype.toString.call([])=="[object Array]"?"是数组":"不是数组");
      console.log(Object.prototype.toString.call({}));
      console.log(Object.prototype.toString.call(function(){}));
      console.log(Object.prototype.toString.call(/\d/));
      var father={};
       var son={};
       father.__proto__=Array.prototype;
       son.__proto__=father;
      console.log(Object.prototype.toString.call(son)=="[object Array]"?"是数组":"不是数组");//不是
      //结论: 对象一旦创建,class属性就无法修改
             //修改继承关系,也无法修改class属性

第五种Array.isArray()

Array.isArray(obj) 不检查整个原型链

     console.log(Array.isArray([]));
      console.log(Array.isArray({}));
  //如果浏览器不支持isArray
  if(Array.prototype.isArray===undefined){//if(!Array.isArray)
      //给?添加isArray方法
      Array.prototype.isArray=function(arg){
          //强行调用原始toString方法,和"[object Array]"比较
          return Object.prototype.toString.call(arg)
          =="[object Array]"?"是数组":"不是数组";
      }
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值