【实例比较】JS检查变量是否数组的2种方法
作者:admin 时间:2022-5-31 18:59:53 浏览:本文将通过具体实例,介绍JS检查变量是否数组的2种常用方法。
1、使用Object.prototype.toString.call()
Object.prototype.toString.call() 是一种判断 javascript 对象类型的标准化方法,因为我们知道 Object.prototype.toString、Number.prototype.toString、Function.prototype.toString、String.prototype.toString 和 Array.prototype.toString 都是不同的东西,因此使用Object.prototype.toString.call(obj)方式可以很好的区分各种类型:
console.log(Object.prototype.toString.call("jerry"));
//输出:[object String]
console.log(Object.prototype.toString.call(12));
//输出:[object Number]
console.log(Object.prototype.toString.call(true));
//输出:[object Boolean]
console.log(Object.prototype.toString.call(undefined));
//输出:[object Undefined]
console.log(Object.prototype.toString.call(null));
//输出:[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));
//输出:[object Object]
console.log(Object.prototype.toString.call(function(){}));
//输出:[object Function]
console.log(Object.prototype.toString.call([]));
//输出:[object Array]
console.log(Object.prototype.toString.call(new Date));
//输出:[object Date]
console.log(Object.prototype.toString.call(/\d/));
//输出:[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));
//输出:[object Object]知道了这个,我们就能使用Object.prototype.toString.call()检查变量是否数组,我们看看下面的实例。
//判断: [object Array] 是否等于 [object Array]
//输出: true
console.log(Object.prototype.toString.call([]) === '[object Array]');
//判断: [object Array] 是否等于 [object Array]
//output: true
console.log(Object.prototype.toString.call(new Array()) === '[object Array]');
//判断: [object Object] 是否不等于 [object Array]
// output: false
console.log(Object.prototype.toString.call({}) === '[object Array]');
//判断: [object Number] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(123) === '[object Array]');
//判断: [object Boolean] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(true) === '[object Array]');
//判断: [object String] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call('javascript') === '[object Array]');
//判断: [object Null] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(null) === '[object Array]');
//判断: [object Undefined] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(undefined) === '[object Array]');
//判断: [object Number] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(NaN) === '[object Array]');
为什么不直接使用obj.toString()呢?
我们看看下面几个例子:
console.log("jerry".toString());
//输出:jerry
console.log((1).toString());
//输出:1
console.log([1,2].toString());
//输出:1,2
console.log(new Date().toString());
//输出:Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
console.log(function(){}.toString());
//输出:function (){}
console.log(null.toString());
//输出:error
console.log(undefined.toString());
//输出:error同样是检测对象obj调用toString方法,obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什么?
这是因为toString为Object的原型方法,而Array,function等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法(function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串.....),而不会去调用Object上原型toString方法(返回对象的具体类型),所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。
2、使用Array.isArray()
Array.isArray()是JS检查变量是否数组的另一种方法。我们看看如下实例:
//输出:true
console.log(Array.isArray([]));
//输出:true
console.log(Array.isArray(new Array()));
//输出: false
console.log(Array.isArray({}));
//输出: false
console.log(Array.isArray(123));
//输出: false
console.log(Array.isArray(true)) ;
//输出: false
console.log(Array.isArray('javascript'));
//输出: false
console.log(Array.isArray(null));
//输出: false
console.log(Array.isArray(undefined)) ;
//输出: false
console.log(Array.isArray(NaN)) ;
我们可以使用下面的另一个代码示例快速检查变量是否数组。
function checkIfArray(array){  
      
    return (Array.isArray(array) === true && !array.length);  
}  
  
//输出:true  
console.log(Array.isArray([]));  
  
//输出:true  
console.log(checkIfArray(new Array()));  
  
//输出: false  
console.log(checkIfArray({}));   
  
//输出: false  
console.log(checkIfArray(123));   
  
//输出: false  
console.log(checkIfArray(true)) ;   
  
//输出: false  
console.log(checkIfArray('javascript'));   
  
//输出: false  
console.log(checkIfArray(null));   
  
//输出: false  
console.log(checkIfArray(undefined)) ;  
  
//输出: false  
console.log(checkIfArray(NaN)) ;  并不是所有浏览器都支持 Array isArray(),支持 Array isArray() 的浏览器有:
- Google Chrome 5.0
 - Microsoft Edge 12
 - Mozilla Firefox 4.0
 - Safari 5.0
 - Opera 10.5
 
为什么使用 Array.isArray() 方法来检查数组?
ECMAScript 5 (ES5) 引入了 Array.isArray() 方法来检查数组,因为 typeof 无法将数组与其他对象区分开来,例如内置对象 Date 和 RegExp。
使用 Array.isArray() 也有助于确保我们的对象不为null,因为由于长期存在的错误,null 具有“对象”类型。
总结
本文介绍了JS检查变量是否数组的2种常用方法,Object.prototype.toString.call()和Array.isArray()在使用时,你可能需要注意浏览器是否支持的问题。



