let a={};
let b=[];
如用typeof(a)===type(b)均为‘Object’那么我想改进这个方法具体判断参数是数组还是对象,想通过判断是否含有数组方法来进行判断,应该如何来改写?
let a={};
let b=[];
如用typeof(a)===type(b)均为‘Object’那么我想改进这个方法具体判断参数是数组还是对象,想通过判断是否含有数组方法来进行判断,应该如何来改写?
《JavaScript高级程序设计》中 第5.2.1节 检测数组
自从 ECMAScript 3做出规定以后,就出现了确定某个对象是不是数组的经典问题。对于一个网页, 或者一个全局作用域而言,使用 instanceof 操作符就能得到满意的结果:
if (value instanceof Array){ //对数组执行某些操作 }
instanceof 操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架,那实 际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的 Array 构造函数。如果你从 一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自 不同的构造函数。 为了解决这个问题,ECMAScript 5新增了 Array.isArray()方法。这个方法的目的是终确定某 个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。这个方法的用法如下。
if (Array.isArray(value)){ //对数组执行某些操作 }
支持 Array.isArray()方法的浏览器有 IE9+、Firefox 4+、Safari 5+、Opera 10.5+和 Chrome
结论 用Array.isArray()
方法 不用使用 instanceof
使用instanceof
判断。
[] instanceof Array
true[] instanceof Object
true({}) instanceof Array
falsefunction getType (data) {
return Object.prototype.toString.call(data).split(' ')[1].slice(0, -1)
}
getType([]) // Array
getType({}) // Object
getType('') // String
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决