【实例比较】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()
在使用时,你可能需要注意浏览器是否支持的问题。
相关文章
- 站长推荐