判断数组类型的方法

别看这个问题看似简单,面试真的经常问到,没有总结过得话一时间还有点想不起来!

一、instanceof

instanceof只适用于对象类型的数据,基本类型会直接返回false,其实现原理是在原型链上查找某属性。

let arr = [1, 2, 3];
let a = arr instanceof Array;
console.log(a);  // true

注:这个方法是假定只有一个全局执行环境,如果网页中包含多个框架,那就会存在两个以上不同版本的Array构造函数。 

二、ES6中的isArray方法

let arr = [1, 2, 3]; 
console.log(Array.isArray(arr));  // true

注:这个方法是ES6语法中新增的,目前支持的浏览器有IE 9+,Firefox 4+,Safari 5+,Opera 10.5+ 和 Chrome。 

三、__proto__和prototype

let arr = [1, 2, 3]; 
console.log(arr.__proto__ === Array.prototype);   //true

四、constructor

let arr = [1, 2, 3]; 
console.log(arr.__proto__.constructor === Array);  //true

五、toString方法

let arr = [1, 2, 3]
console.log(Object.prototype.toString.call(arr));  // [object Array]

六、Array 原型链上的 isPrototypeOf

检验Array/Object/Number...是否在arr的原型链上

let arr = [1,2,3];
console.log(Array.prototype.isPrototypeOf(arr));  // true
console.log(Object.prototype.isPrototypeOf(arr)); // true
console.log(Number.prototype.isPrototypeOf(arr)); // false

七、Object.getPrototypeOf

该方法会返回指定对象的原型

let arr = [1,2,3];
let b = {};
console.log(Object.getPrototypeOf(arr) === Array.prototype);   // true
console.log(Object.getPrototypeOf(arr) === Object.prototype);   // false
console.log(Object.getPrototypeOf(arr) === Function.prototype); // false

console.log(Object.getPrototypeOf(b) === Array.prototype);  // false
console.log(Object.getPrototypeOf(b) === Object.prototype); // true

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值