怎么判断一个数据是不是数组呢?
其实这个也是一个常考的题目。在面试的过程中,更是一个高频的面试题
1、数组方法 isArray()
Array.isArray(variable);
这是js的一个方法,专门用来测试对象是否是Array类型。
举例:
由例子可知,此方法是即为便利的,直接就能对数据的类型进行判断。
2、原型 prototype + toString + call
Object.prototype.toString.call(variable).indexOf(‘Array’) !== -1;
Object.prototype.toString.call() 使用了 toString方法,所以返回值是一个字符串
var arr = [1,2]
var obj = {a:1}
Object.prototype.toString.call(arr) //"[object Array]"
Object.prototype.toString.call(obj) //"[object Object]"
所以要使用 indexOf() 来进行二次判断,看返回值有没有 Array
这个关键字
Object.prototype.toString.call(arr).indexOf('Array') // 8
Object.prototype.toString.call(arr).indexOf('Object') // -1
Object.prototype.toString.call(arr).indexOf('Array') !==-1 //true
Object.prototype.toString.call(arr).indexOf('Object') !==-1 //false
这个方法比之 第一种,稍显麻烦一些,但是也是可以精确判断是否为数组
3、构造函数 constructor
variable. _ proto _ .constructor.name
这种方法,与使用原型的方法类似。话不多说,直接上代码,上图:
var arr = [1,2,3,4]
var obj = {a:1,b:2}
console.log(arr)
console.log(obj)
打印日志如下:
数组:
对象:
由图片可知道,在constructor下面有一个name属性,值就是当前数据的类型
所以,可以依照以下的代码判断数据的类型
obj.__proto__.constructor.name
arr.__proto__.constructor.name
4、instanceof
variable instanceof Array
当 variable 为 Array 的直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
var obj = {a:1}
var arr = [1,2,3]
obj instanceof Array // fasle
arr instanceof Array // true